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();
}
}
}
Уронил компилятор C# 2005
Код:
Компилер с визгами упал выдав предложение отправить отчёт в мелкософт.
Вот что было в списке ошибок:
Цитата:
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<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 });
t.Print<int>(new int[] { 1, 2, 3, 4, 5 });
Вуаля. Компиляция успешна.
Ктонибудь может сказать, что это такое было - ошибка-то у меня дома вполне воспроизводима.
Код:
[LEFT][FONT=Courier New]t.Print<string>(new [] { "a", "ab", "abc", "abcd" });
t.Print<int>(new [] { 1, 2, 3, 4, 5 });[/FONT][/LEFT]
t.Print<int>(new [] { 1, 2, 3, 4, 5 });[/FONT][/LEFT]
Именно это и делает. У меня на компиляторе C# 2.0 такой код естественно не проходит. А компилер C# 3.0 скомпилил нормально.
Ага. У меня сейчас в голове каша из 3х стандаров C#. Периодически проскакивают глюки =)
Цитата: hardcase
Ага. У меня сейчас в голове каша из 3х стандаров C#. Периодически проскакивают глюки =)
На самом деле это один стандарт - ECMA-334, просто он построен таким образом, что его можно расширять. У тебя кстати IntelliSense работает нормально при установленном LINQ??
Цитата: 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.
Вот именно из-за всех этих глюков нормально програмить под .NET 3.0 и LINQ на C# 3.0 в MSVS2005 не стал - надо ждать релиза "Оркаса". Когда принесут CTP-версию, поделишься скриншотами и впечатлениями