Если вы попытаетесь скомпилировать приведенный ниже запрос в Visual Basic .NET, это не удастся.
From x In {1, 2} Select x.ToString()
Ошибка, выданная компилятор:
Имя переменной диапазона не может соответствовать имени члена класса 'Object'.
Нет ничего плохого в эквивалентном запросе C #, однако:
from x in new[]{1, 2} select x.ToString()
Этого не происходит с ] ToString
перегрузка, которая принимает формат (это член Int32, а не Object). Это действительно происходит с другими членами Object, если они не принимают аргумент: с GetType и GetHashCode он не работает; с Equals (объект) он компилируется.
Почему действует это ограничение и какие альтернативы я могу использовать?