在其范围内具有匿名类型的局部函数

Local functions with anonymous types in their scope

我正在玩 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);

生产

Error CS1061 'T' does not contain a definition for 'Z2' and no extension method 'Z2' accepting a first argument of type 'T' could be found (are you missing a using directive or an assembly reference?)

这件事还没有完成吗?发布后我们可以在本地函数中访问匿名类型的属性吗?

这与本地函数完全无关。这是 C# 泛型的(设计上的)限制。

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

如果您 de-generalise 您的方法并需要 A ,这将起作用。

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