Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Уронил компилятор C# 2005

5
16 марта 2007 года
hardcase
4.5K / / 09.08.2005
Скормил я сегодня компилятору следующий код:
Код:
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;

namespace ConsoleApplication1 {
    class Program {

        public class T {

            public void Print<V>(IEnumerable<V> vals) {
                MethodInfo printMethod = this.GetType().GetMethod("Print", new Type[] { typeof(IEnumerable<V>) });
                printMethod.Invoke(this, new object[] { vals });
            }

        }

        public class H : T {
            public void Print(IEnumerable<string> strs) {
                Console.WriteLine("Print(IEnumerable<string>)");
                foreach (string s in strs) {
                    Console.WriteLine(s);
                }
            }
            public void Print(IEnumerable<int> ints) {
                Console.WriteLine("Print(IEnumerable<int>)");
                foreach (int i in ints) {
                    Console.WriteLine(i);
                }
            }
        }

        static void Main(string[] args) {
            T t = new H();
            t.Print<string>(new [] { "a", "ab", "abc", "abcd" });
            t.Print<int>(new [] { 1, 2, 3, 4, 5 });
            Console.ReadLine();
        }
    }
}

Компилер с визгами упал выдав предложение отправить отчёт в мелкософт.

Вот что было в списке ошибок:
Цитата:

Error 1 Internal Compiler Error (0xc0000005 at address 5A7D9D68): likely culprit is 'BIND'.

An internal error has occurred in the compiler. To work around this problem, try simplifying or changing the program near the locations listed below. Locations at the top of the list are closer to the point at which the internal error occurred. Errors such as this can be reported to Microsoft by using the /errorreport option.

Error 2 Internal Compiler Error: stage 'BIND' C:\Documents and Settings\hc\Мои документы\Visual Studio 2005\Projects\MethodInvoke\MethodInvoke\Program.cs 35 13 MethodInvoke

далее ещё с десяток сообщений в духе №2



Внимательно посмотрел на следующие вызовы:

 
Код:
t.Print<string>(new [] { "a", "ab", "abc", "abcd" });
t.Print<int>(new [] { 1, 2, 3, 4, 5 });


И изменил вот так:
 
Код:
t.Print<string>(new string[] { "a", "ab", "abc", "abcd" });
t.Print<int>(new int[] { 1, 2, 3, 4, 5 });


Вуаля. Компиляция успешна.

Ктонибудь может сказать, что это такое было - ошибка-то у меня дома вполне воспроизводима.
273
22 марта 2007 года
3A3-968M
1.2K / / 22.12.2005
Ставил C# 3.0 что-ли? Потому что только с выпуском C# 3.0 можно не указывать тип элементов массива. А твой код:
 
Код:
[LEFT][FONT=Courier New]t.Print<string>(new [] { "a", "ab", "abc", "abcd" });
t.Print<int>(new [] { 1, 2, 3, 4, 5 });[/FONT][/LEFT]

Именно это и делает. У меня на компиляторе C# 2.0 такой код естественно не проходит. А компилер C# 3.0 скомпилил нормально.
5
22 марта 2007 года
hardcase
4.5K / / 09.08.2005
Ага. У меня сейчас в голове каша из 3х стандаров C#. Периодически проскакивают глюки =)
273
23 марта 2007 года
3A3-968M
1.2K / / 22.12.2005
Цитата: hardcase
Ага. У меня сейчас в голове каша из 3х стандаров C#. Периодически проскакивают глюки =)


На самом деле это один стандарт - ECMA-334, просто он построен таким образом, что его можно расширять. У тебя кстати IntelliSense работает нормально при установленном LINQ??

5
23 марта 2007 года
hardcase
4.5K / / 09.08.2005
Цитата: 3A3-968M
На самом деле это один стандарт - ECMA-334, просто он построен таким образом, что его можно расширять. У тебя кстати IntelliSense работает нормально при установленном LINQ??

LINQ стоит у меня уже давно, с лета прошлого - потому и успели все конструкции языковые смешаться =))

Интелли сенс глючит ещё как. Лямбда выражения он не подсвечивает: к примеру в чем-то вот таком

 
Код:
t => from c in Collection where c.t == t select c;

из ключевых слов ничего не подсветит.

Ну, при наборе текста система предлагает совсем не те идентификаторы, что мне хочется написать, потому Esc и ещё раз Esc.
Кароче я привык уже, даже перестал замечать такие неудобства.
Но это только в LINQ-проектах (вернее в тех, где я использую C#3.0 компилер), в классических C#2.0 проектах все в порядке, за исключением ненужный списка LINQ расширений в IEnumerable<T>-совместимых переменных.

Скоро один паренёк мне принесёт Visual Studio "Orcas" CTP - вот на это будет интересно посмотреть.



P.S. На русскую венду LINQ не хочет ни в какую ставиться, я говорю про ту, что уже локализована, на MUI - всё в порядке. Я конечно нашёл способ рукаи ставить, но DLinq дизайнер не смог подключить в VS2005.
273
24 марта 2007 года
3A3-968M
1.2K / / 22.12.2005
Вот именно из-за всех этих глюков нормально програмить под .NET 3.0 и LINQ на C# 3.0 в MSVS2005 не стал - надо ждать релиза "Оркаса". Когда принесут CTP-версию, поделишься скриншотами и впечатлениями
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог