Ответ 1
Вот как я это понимаю. Рассмотрим следующий код:
Dim q = From x In {"Bob", "Larry"}
Select x.Length
Select Length * 2
В вышеприведенном запросе имя переменной Length
автоматически "угадывается" для вас компилятором VB на основе выражения x.Length
. Теперь, правда, вы не просили об этом; это просто функция, предоставляемая независимо от того, нравится вам это или нет. Но теперь рассмотрим это:
Dim q = From x In {"Bob", "Larry"}
Select (x.Length)
Select Length * 2
Вышеприведенное не компилируется, потому что выражение внутри первого предложения Select
не так просто, как в первом случае (верьте или нет); скобки затрудняют дело, достаточное для того, чтобы компилятор не выбрал имя Length
; вместо этого он генерирует имя, которое не может использоваться из кода.
Итак, в основном, что происходит с ToString()
, заключается в том, что это выражение достаточно просто, чтобы компилятор мог использовать для генерации имени переменной, которое можно было использовать, если запрос был расширен, чтобы использовать эту переменную, например:
Dim q = From x In { 1, 2 }
Select x.ToString()
Select ToString.Length
Однако ToString
не является юридическим именем переменной, так как он является членом System.Object
(почему это будет иметь место для переменных в запросах LINQ, но не для стандартных локальных переменных, я не мог сказать).