Почему VB.NET Linq Lambda работает так, а не иначе - PullRequest
1 голос
/ 07 декабря 2011

Я изучаю MVC3 и одновременно перехожу на VB.NET из C # (забавно, я знаю). Я бегу через образец MvcMusicStore для изучения MVC3. Все образцы в C #, поэтому я конвертирую их в VB. Я наткнулся на один фрагмент кода, который не смог напрямую преобразовать, и мне пришлось немного изменить его, чтобы он заработал.

Я понятия не имею, почему один способ работает, а другой нет.

Это не работает:

Dim albums = New List(Of Album)() From { _
    New Album() With { _
     .Title = "A Copland Celebration, Vol. I", _
     .Genre = genres.[Single](Function(g) g.Name = "Classical"), _
     .Price = 8.99D, _
     .Artist = artists.[Single](Function(a) a.Name = "Aaron Copland & London Symphony Orchestra"), _
     .AlbumArtUrl = "/Content/Images/placeholder.gif" _
    }, _
... [MORE INSTANCES]
}.ForEach(Sub(a) context.Albums.Add(a))

Это, однако, работает:

Dim albums = New List(Of Album)() From { _
    New Album() With { _
    .Title = "A Copland Celebration, Vol. I", _
    .Genre = genres.[Single](Function(g) g.Name = "Classical"), _
    .Price = 8.99D, _
    .Artist = artists.[Single](Function(a) a.Name = "Aaron Copland & London Symphony Orchestra"), _
    .AlbumArtUrl = "/Content/Images/placeholder.gif" _
    }, _
    ... [MORE INSTANCES]
}

albums.ForEach(Sub(a) context.Albums.Add(a))

Разница между ними заключается в том, что первый применяет ForEach при создании коллекции, а второй применяет ForEach как отдельный вызов.

Почему это имеет значение?

РЕДАКТИРОВАТЬ: Добавлен оригинальный код C #

Компилятор здесь не жалуется.

new List<Album>
{
    new Album { Title = "A Copland Celebration, Vol. I", Genre = genres.Single(g => g.Name == "Classical"), Price = 8.99M, Artist = artists.Single(a => a.Name == "Aaron Copland & London Symphony Orchestra"), AlbumArtUrl = "/Content/Images/placeholder.gif" },
    ... [MORE INSTANCES]
}.ForEach(a => context.Albums.Add(a));

Ответы [ 2 ]

2 голосов
/ 08 декабря 2011

Уверен, что ваша проблема здесь:

Dim albums =

Вы пытаетесь присвоить результат операции ForEach переменной albums.ForEach ничего не возвращает, поэтому вы не выполняете назначение на albums.

2 голосов
/ 07 декабря 2011

Тип возврата метода ForEach () - void, поэтому он ничего не возвращает, поэтому вы не можете присвоить результат вызова переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...