在其范围内具有匿名类型的局部函数
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;
}
我正在玩 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;
}