Si intenta compilar la consulta siguiente en Visual Basic .NET, falla.¿Por qué no puedo proyectar ToString() en VB?
From x In {1, 2} Select x.ToString()
El error dado por el compilador es:
rango de nombres de variable no puede coincidir con el nombre de un miembro de la clase 'Objeto'.
No hay nada malo con el C# consulta equivalente, sin embargo:
from x in new[]{1, 2} select x.ToString()
Esto no sucede con la sobrecarga de ToString
que tiene un formato (que es un miembro de Int32, no objeto). Sucede con otros miembros de Object, siempre que no tomen un argumento: con GetType y GetHashCode falla; con Equals (objeto) compila.
¿Por qué existe esta restricción y qué alternativas puedo usar?
Interesante. 'From x In {1, 2} Select x.ToString (" d ")' se compila, probablemente porque 'Object' no lo tiene. No conozco ningún VB, pero parece extraño. – Kobi
@Kobi: Supongo que su ejemplo compila porque no hay un miembro 'ToString' en' Object' que tome un argumento. Por qué eso sería un problema es lo que me desconcierta. –
Creo que es porque obviamente no es una propiedad cuando se invoca con un argumento, y por lo tanto, VB sabe que no lo está usando para crear un objeto anónimo con una propiedad 'ToString', mientras que si alguien se equivoca. (Que podría haber sido lo que estabas diciendo - No soy un experto en VB.) – Rup