Re[3]: C# 3.0 и анонимные делегаты - разочарование
От: GlebZ Россия  
Дата: 31.03.08 09:51
Оценка: 6 (1)
Здравствуйте, bexab, Вы писали:

B>Здравствуйте, AndrewVK, Вы писали:


B>известны ли мотивы, запрещающие делать так ?


B>
B>object o = delegate() { return 0; };
B>


B>Error => Cannot convert anonymous method block to type 'object' because it is not a delegate type

Потому что это анонимный метод а не делегат. Тебе же написали. Если за тебя компилятор делает некоторую работу, например, создает делегат, это еще ничего не значит. Ну например, один и тот же код:
var y=Array.Find(a, x => x==1); 
[/с#]
Красиво - но обманчиво. Лямбда - не делегат, а анонимный метод. Уберем некоторый синтаксический сахар, получится:
[c#]
var y=Array.Find(a, new Predicate<int>(x=>x==1));

Синтаксический сахар шарпа не требует явное создание делегата. Оно это делает за нас.
соответсвенно, если мы хотим из метода сделать делегат, то его нужно создать:
object o=new Predicate<int>(x=>x==1);

Или
Predicate<int> b = (x => x == 2);

Разница между методом, и типизированным делегатом — большая Просто иногда за нас эту разницу нивелирует компилятор.
... << RSDN@Home 1.2.0 alpha rev. 789>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.