Анонимные функции в C # - PullRequest
0 голосов
/ 13 марта 2011

Следующий синтаксис является действительным кодом VB.NET

Dim myCollection As New List(Of Stock)
myCollection.Add(New Stock(Guid.NewGuid, "Item1"))
myCollection.Add(New Stock(Guid.NewGuid, "Item2"))

Dim res As List(Of Stock) = myCollection.FindAll(Function(stock As Stock) As Boolean
                                                     If stock.Description = "Item2" Then
                                                         Return True
                                                     End If
                                                     Return False
                                                 End Function)

Как я могу сделать то же самое в C #? Я пытался ...

myCollection.FindAll(bool delegate(Stock stock) {
                        if (blah blah) {
                        }
                     });

Но, похоже, я как-то неправильно структурировал его, поскольку я получаю следующую ошибку. «Ошибка 1 Неверное выражение« bool »

Ответы [ 3 ]

4 голосов
/ 13 марта 2011

Следующий код будет эквивалентен C # с использованием лямбда-выражения

myCollection.FindAll((stock) => stock.Description == "Item2");

При использовании анонимной функции вышеприведенное будет записано следующим образом

myCollection.FindAll(delegate(Stock stock) 
                     {
                       return stock.Description == "Item2";
                     });

Вы не указываете возвратвведите анонимную функцию, как в VB.NET

4 голосов
/ 13 марта 2011

Вам не нужно ключевое слово bool.Тип возвращаемого значения определяется автоматически на основе кода в анонимной функции.Также взгляните на лямбда-выражения C # - это краткая форма того же понятия, и она может быть более понятной, чем традиционный анонимный метод.

Пример использования лямбда-выражения:

myCollection.FindAll(stock => stock.Description == "Item2");
2 голосов
/ 13 марта 2011

Может быть преобразовано в лямбда-выражение.

myCollection.FindAll(s => s.Description == "Item2");
...