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