你可能会认为这是一个错误报告,但是我很好奇我是否在这里非常错误,或者是否有来自Eric或其他人在Microsoft的解释。
现在是Microsoft Connect上的posted as a bug。
考虑以下课程:
class A
{
public object B {
set { }
}
}
此处,A.B
是只写,但其他方面属于罚款
现在,假设我们在表达式中分配:
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 { } }
}
(是的,我确实打了一个真正的项目。)
答案 0 :(得分:8)
我担心我不是Eric Lippert(哦,但我可能会如此潇洒......),但作为一名仍然可以搜索来源的Visual Studio语言人,我可以说两件事:
每当您看到以“内部编译器错误”开头的内容时,您肯定发现了一个错误。这就是错误的存在,无论是C#,VB还是C ++编译器。这就是“噢,不管怎样,事情出乎意料地错了!”抛出我们的手和纾困错误。
除此之外,这绝对是应该报告的C#编译器中的错误。正在崩溃的代码假设当你在一个属性上做一个初始化器时,它可以看到一个getter,嘿,猜猜是什么?在这种情况下,没有。奇怪的是,如果我将构造的类型更改为某种类型的“C”而不是“object”,我不会得到崩溃,所以我猜测它是堆栈中的进一步失败(即代码永远不应该得到)到了寻找属性getter的地步。)
希望这有帮助。
答案 1 :(得分:0)
这是我在网上发现的与错误有关的内容,
微软于2010年3月9日上午10:58发布
感谢大家的报道。一世 相信这个问题已得到解决 -RC后。问题是C# 编译器正在尝试崩溃 报告错误或警告。在几个 我们看到警告的情况 报道的是LIB环境 变量包含无效路径。至 避免崩溃,检查你的LIB 环境变量包含有效 路径。
此致
Ed Maurer开发经理,VB和 C#编译器