Я всегда имел проблемы с невозможностью var
/ Dim
переменной неявно при использовании блока Using
для объявления контекста данных, который возвращает начальное значение переменной. Например,
Dim classifications As IEnumerable(Of RT_Classification)
Using dc As New MyDataContext
classifications = dc.RT_Classifications.OrderBy(Function(c) c.Order).ToList()
End Using
тип RT_Classification должен быть указан явно при объявлении переменной. Сравните с Using
, не ограничиваясь только запросом
Dim classifications = dc.RT_Classifications.OrderBy(Function(c) c.Order).ToList()
, в котором вы получите что-то неявное, аналогичное var
в c #. Но тогда контекст данных должен содержать объявление и охватывать весь контекст переменной classifications
, что нежелательно.
Я думал об использовании лямбды, которая в основном решает проблемы
Dim classifications =
(Function()
Using dc As New MyDataContext
Return dc.RT_Classifications.OrderBy(Function(c) c.Order).ToList()
End Using
End Function).Invoke()
но кажется немного громоздким. Однако, зная сокращение ()
для .Invoke()
и предложение IDE для удаления (
)
, я придумал этот странно выглядящий, но рабочий код
Dim classifications =
Function()
Using dc As New MyDataContext
Return dc.RT_Classifications.OrderBy(Function(c) c.Order).ToList()
End Using
End Function()
Обратите внимание на трейлингEnd Function()
, который был новым для меня. У меня вопрос: как долго это доступно и есть ли недостатки в его использовании, прошлые потенциальные проблемы с читабельностью?