Я столкнулся с некоторыми непредвиденными последствиями перехода на моно 2.8.1.Проблема может быть сведена к примеру программы (я не смог ее уменьшить, после вырезания нескольких классов и ~ 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, null, «John Doe») или нового Person (1.0, null, name: «John Doe»),or new Person (1.0, «Джон Доу»)) приводит к безупречной компиляции.Кроме того, под VS2010 файл (и все решение, с которого я начал) компилируется нормально.Приведение удаляет ошибку CS0266, но не CS0584 - так что нет ничего удивительного.
Мой вопрос: это я что-то делаю не так, или MCS (т.е. ошибка в MCS очевидна для меня - что еще, внутренняя ошибка'' означало бы, но, возможно, это нормально, такая программа не будет компилироваться), или, возможно, компилятор Microsoft в VS2010 не должен позволять компилировать такой код?
Могу поспорить, что mcs не прав (не может угадать правильный конструктор), но, может быть, это иное, и я не должен знать лучше?
PS.Я попытался найти известную ошибку в Google и Novell Bugzilla, но не смог найти ничего подходящего.Опять же, я могу быть слепым;)