Я изучаю 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));