2012-03-05 3 views

ответ

6

Во-первых, обратите внимание, что еще один делегат - просто: скорее, он использует лямбда синтаксис вместо анонимного метода синтаксиса (это по существу означает, точно так же, хотя).

касается того, как это исправить: просто отнять ;:

l.Find((ABC a) => a.A == 4); 

или более просто:

l.Find(a => a.A == 4); 

(скобки только необходимо если у вас есть несколько параметров, явных типов полезны для значений)

4

Попробуйте

l.Find((a) => a.A == 4); 
+0

Спасибо, я не знал, что это сделал тип, даже если это поле класса. – user970696

2

Почему вы не используете его простым способом, я думаю, что нет необходимости писать:

l.Find(a => a.A == 4); 

Это утверждение l.Find((a) => a.A == 4); можно записать ваше заявление l.Find(delegate(ABC a) { return a.A == 4; });. Как вы видели, предикат может быть заменен анонимным методом (делегатом).

(.NET 2,0)

fooList.Find(delegate (Foo f) { return f.Equals(fooTarget); }); 

или (поздняя версия)

fooList.Find(f => f.Equals(fooTarget)); 
9

Просто чтобы быть полным, любой из них было бы справедливо:

// Fullest version 
l.Find((ABC a) => { return a.A==4; }); 

// Infer the type of the parameter 
l.Find((a) => { return a.A==4; }); 

// Single parameter - can remove the() 
l.Find(a => { return a.A==4; }); 

// Single expression - can remove braces and semi-colon 
l.Find(a => a.A == 4); 

(Вы можете используйте часть «одиночного выражения» независимо от других ярлыков.)

Смежные вопросы