【问题标题】:dumping static properties in linqpad在 linqpad 中转储静态属性
【发布时间】:2011-03-29 03:43:56
【问题描述】:
public class Test
{
    public int a = 2;
    public static int b = 5;
    public struct C
    {
        public int d = 9;
        public static int e = 7;
    }
}

new Test().Dump();

上面的代码将转储新创建的对象并将a列为属性,但不会列出b或嵌套的静态结构C或其中的任何内容。
如果我有很多自动生成的静态属性,我该如何转储所有内容?

【问题讨论】:

    标签: c# linqpad


    【解决方案1】:

    反思作品

    typeof(Test)
    .GetFields(BindingFlags.Static | BindingFlags.Public)
    .Select(f => new { name = f.Name, value = f.GetValue(null)})
    .Dump();
    

    【讨论】:

      【解决方案2】:

      静态实例变量不是您正在创建的“new Test()”实例的一部分。它们是 Test 类的静态实例的一部分。您可以阅读静态类和静态类成员here

      你可以通过使用查看静态变量

      (Test.b).Dump();
      (Test.C.e).Dump();
      

      希望这会有所帮助。

      【讨论】:

      • 好吧,即使在您的情况下,我也可以在没有括号的情况下执行Test.b.Dump(),但是如果我有超过 10,000 个自动生成的静态属性和结构,那么单独转储每个单独的属性和结构就会成为问题.
      • LinqPad中的Dump()方法是静态扩展方法,扩展方法需要对象的实例,所以无法转储静态类的属性。
      • 好吧,如果Test.b.Dump() 是可能的并且 b 是一个类的静态属性(不是任何对象的实例),那么我希望有一种方法可以真正得到所有静态属性转储一口气...
      • 是的,您可以访问 int 实例上的 Extension 方法,但您将无法让扩展方法在静态类上工作。请参阅这篇关于静态类扩展方法的帖子 - stackoverflow.com/questions/249222/…
      猜你喜欢
      • 1970-01-01
      • 2018-04-18
      • 1970-01-01
      • 2016-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      相关资源
      最近更新 更多