本地函数在其范围内具有匿名类型

时间:2017-01-24 21:07:57

标签: c# .net anonymous-types c#-7.0

我正在玩VS 2017 RC和新的C#功能:

class Program
 {
        class A
       {
            public int Z1 { get; set; }
            public int Z2 { get; set; }
        }

        static void Main(string[] args)
        {
            var q = new[] { new A() }.Select(x => new { x.Z2 });
            Do(q.First());
            int Do<T>(T p)
            {
                Console.WriteLine(p.GetType().Name);
                return 0;
            }
       }
}

上面的代码确实编译和输出

"<>f__AnonymousType0`1"

但是,以下情况并非如此:

Console.WriteLine(p.Z2);
制造

  

错误CS1061&#39; T&#39;不包含&#39; Z2&#39;的定义和不   扩展方法&#39; Z2&#39;接受第一个类型&#39; T&#39;可能   发现(您是否缺少using指令或程序集引用?)

这件事尚未完成吗?我们能否在发布后访问本地函数内的匿名类型的属性?

1 个答案:

答案 0 :(得分:4)

这与本地功能无关。这是C#泛型的限制(按设计)。

您无法访问函数内部的.Z2,因为并非所有类型都可以使用它。

如果您对您的方法进行反演,并且需要A,那么这将有效。

        int Do(A p) {
            Console.WriteLine(p.Z2);
            return 0;
        }