我正在玩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指令或程序集引用?)
这件事尚未完成吗?我们能否在发布后访问本地函数内的匿名类型的属性?
答案 0 :(得分:4)
这与本地功能无关。这是C#泛型的限制(按设计)。
您无法访问函数内部的.Z2
,因为并非所有类型都可以使用它。
如果您对您的方法进行反演,并且需要A
,那么这将有效。
int Do(A p) {
Console.WriteLine(p.Z2);
return 0;
}