有时在集合上执行ToList()并且它不会返回很多有用的信息。如何从集合和子集合中获取有用的信息?
答案 0 :(得分:0)
虽然能够在即时窗口中使用LINQ会很好,但我还没有看到可靠的解决方案。肯定会很好。但是,如果您需要快速获取某些信息,可以使用以下扩展方法。不幸的是,这不会过滤您的列表。
public static class EnumerableExtensions
{
public static List<String> PropertyNames(this IEnumerable list)
{
var items = list.OfType<Object>();
return items.Any()
? items.First().GetType()
.GetProperties(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)
.Select(p => p.Name).ToList()
: new List<string>();
}
public static List<Object> Peek(this IEnumerable list, String name)
{
var data = from object item in list let property = item.GetType()
.GetProperty(name, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)
where property != null select property.GetValue(item, null);
return data.OfType<Object>().ToList();
}
}
然后您可以在即时窗口中开始获取以下信息: (不要忘记扩展方法引用)
myList.Peek("CustomObject"); // Get a list of CustomObject child property.
如果你需要这些属性。
myList.Properties() // Get a list of property names.
你可以将它们链好。
myList.Peek("CustomObject").PropertyNames(); // Get names => Found "Height" property.
myList.Peek("CustomObject").Peek("Height"); // Get a list of heights.