我遇到了一些无法预料的移植到mono 2.8.1的后果。问题可以被归结为一个示例程序(I一直无法进一步降低它,切割几个类和〜1000行的代码下面引用该文件之后)单声道+命名/可选参数=编译器错误?
public class Person
{
public Person(int age, string name = null){}
public Person(double income, string name = null){}
public Person(double income, int age, string name = null){}
}
class Program
{
static void Main()
{
Person p = new Person(1.0, name: "John Doe");
}
}
编译的上面的代码与MCS给出输出:
test.cs(22,24): error CS0584: Internal compiler error: Internal error
test.cs(22,20): error CS0266: Cannot implicitly convert type `object' to `NamedParams.Person'.
An explicit conversion exists (are you missing a cast?)
Compilation failed: 2 error(s), 0 warnings
取出使用可选/命名参数(即调用新的Person(1.0,空, “李四”)或新的Person(1.0,空,名称: “李四”),或新的Person( 1.0,“John Doe”))导致了完美的编译。此外,在VS2010下,文件(以及我开始的整个解决方案)编译得很好。 Casting会移除错误CS0266,但不会移除CS0584 - 因此在那里不会感到意外。我的问题:是我做错了什么,或者mcs(即mcs中的bug对我来说很明显 - 还有什么,内部错误会是什么意思,但也许没关系,这样的程序不会编译),或者也许在VS2010中的微软编译器不应该让这样的代码编译?
我敢打赌,这是MCS谁的错(不能猜对构造函数),但也许它,否则,我不应该知道的?
PS。我尝试在Google和Novell的Bugzilla中搜索这样一个已知的bug,但无法找到任何相关的东西。再一次,我可能会失明;)
你甚至可以设置一个字符串为空... – Blam 2010-12-20 23:55:23
有没有错误编译使用visual studio。我没有单声道来尝试它,以确认。 – 2010-12-21 00:05:54
@Courtney:单声道可在线获取[此处](http://ideone.com/kZ2Eo)。 – Vlad 2010-12-21 00:07:11