您可能会认为这是一个错误报告,但是我很好奇我在这里是否大错特错,或者是否有来自 Eric 或 Microsoft 其他人的解释。
更新
这现在作为一个错误发布在 Microsoft Connect 上。
描述
考虑以下类:
class A
{
public object B {
set { }
}
}
在这里,A.B
是一个只写但其他很好的属性。
现在,假设我们在 expression 内部分配它:
Expression<Func<A>> expr =
() => new A {
B = new object { }
};
此代码使 C# 编译器(3.5 .30729.4926 和4.0 .30319.1)吐出
内部编译器错误(地址 013E213F 处的 0xc0000005):可能的罪魁祸首是“BIND”。
和崩溃。
但是,仅用构造函数 ( )替换对象初始值设定项语法 ( )就可以很好地编译{ }
( )
。
复制的完整代码:
using System;
using System.Linq.Expressions;
class Test {
public static void Main()
{
Expression<Func<A>> expr =
() => new A {
B = new object { }
};
}
}
class A {
public object B { set { } }
}
(是的,我确实在一个真正的项目上成功了。)