泛型 - 获取属性 LINQ
Generics - get properties LINQ
我有这个class:
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 查找集合中具有最长字符串值的每个 属性 的值。我该怎么做?
由于 prop_value 是一个 object
,您使用单个值调用 string.Join(string, parm object[])
,这相当于;
Console.WriteLine(prop_value?.ToString());
默认ToString()
方法returns对象的类型名称。
更新
这将为您提供“每个项目所有属性的最长字符串中的第一个”
或者换个说法。这将遍历通用列表,获取所有属性及其值(其中为字符串),然后获取第一个值(按长度降序排列)
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 然后 select?无论哪种方式,这都会为您提供列表中每个对象的属性值列表
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));
}
我有这个class:
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 查找集合中具有最长字符串值的每个 属性 的值。我该怎么做?
由于 prop_value 是一个 object
,您使用单个值调用 string.Join(string, parm object[])
,这相当于;
Console.WriteLine(prop_value?.ToString());
默认ToString()
方法returns对象的类型名称。
更新
这将为您提供“每个项目所有属性的最长字符串中的第一个”
或者换个说法。这将遍历通用列表,获取所有属性及其值(其中为字符串),然后获取第一个值(按长度降序排列)
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 然后 select?无论哪种方式,这都会为您提供列表中每个对象的属性值列表
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));
}