如何解决泛型-获取属性LINQ
我上了这个课:
private void Get_properties<T>(ObservableCollection<T> collection)
{
List<string> longest_values = new List<string>();
var properties = typeof(T).GetProperties();
foreach (var prop in properties)
{
var prop_value = collection.OrderByDescending(y=> prop.GetValue(y,null)).FirstOrDefault();
longest_values.Add(prop_value);
}
//Now I want to do something with this List
foreach (var item in longest_values)
{
//..
}
}
我试图通过LINQ查找集合中具有最长字符串值的每个属性的值。我该怎么办?
解决方法
更新
这将为您提供“每个项目的所有属性中最长字符串的第一个 ”
或者说另一种方式。这将遍历泛型列表,获取所有属性及其值(其中的值是字符串),然后获取第一个值(按长度降序排列)
var result = typeof(T)
.GetProperties()
.Where(x => x.PropertyType == typeof(string))
.Select(prop => collection
.Select(y => (string) prop.GetValue(y,null))
.OrderByDescending(z => z.Length)
.FirstOrDefault())
.ToList();
foreach (var item in result)
Console.WriteLine(item);
原始
我认为您与OrderByDescending
略有偏离,您想要一个Select
然后是orderby或orderby然后选择也许?无论哪种方式,都会为您提供列表中每个对象的属性值列表
var properties = typeof(T).GetProperties();
foreach (var prop in properties)
{
var prop_values = collection.Select(y => prop.GetValue(y,null));
Console.WriteLine(string.Join(",",prop_values));
}
,
由于prop_value是object
,因此您要用一个值调用string.Join(string,parm object[])
,该值等于;
Console.WriteLine(prop_value?.ToString());
默认的ToString()
方法返回对象的类型名称。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。