【问题标题】:Local functions with anonymous types in their scope在其范围内具有匿名类型的本地函数
【发布时间】:2017-06-09 21:23:45
【问题描述】:

我正在使用 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 'T' 不包含 'Z2' 的定义并且没有 接受“T”类型的第一个参数的扩展方法“Z2”可以是 找到(您是否缺少 using 指令或程序集引用?)

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

【问题讨论】:

  • 你能添加任何让你认为它应该工作的参考来源吗?还没看过。
  • 这将与非本地函数的行为相同。

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


【解决方案1】:

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

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

如果您对您的方法进行去泛化并改为使用A,这将起作用。

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

【讨论】:

    猜你喜欢
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多