如何从Visual Studio即时窗口轻松收集信息

本文关键字:信息 窗口 Visual Studio | 更新日期: 2023-09-27 17:58:13

有时对集合执行ToList(),它不会返回太多有用的信息。如何从集合和子集合中获取有用信息?

如何从Visual Studio即时窗口轻松收集信息

虽然能够在即时窗口中使用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.