He notado algo peculiar sobre Visual Studio. En primer lugar, intente escribir esto (C#) en algún lugar de una función:Advertencia de referencia nula de Visual Studio: ¿por qué no hay ningún error?
class Foo
{
public void Bar()
{
string s;
int i = s.Length;
}
}
Ahora, de inmediato se marcará el s
en s.Length
como un error, diciendo "Use of unassigned local variable 's'
". Por otro lado, probar este código:
class Foo
{
private string s;
public void Bar()
{
int i = s.Length;
}
}
Compilará, y subrayar la s
en private string s
con una advertencia, diciendo "Field 'Foo.s' is never assigned to, and will always have its default value null
".
Ahora, si VS es tan inteligente y sabe que s siempre será nulo, ¿por qué no es un error obtener su longitud en el segundo ejemplo? Mi conjetura original fue, "solo da un error de compilación si el compilador simplemente no puede completar su trabajo. Dado que el código técnicamente se ejecuta siempre y cuando nunca se llame a Bar(), es solo una advertencia". Excepto que la explicación es invalidada por el primer ejemplo. Todavía podría ejecutar el código sin error siempre que nunca llame a Bar(). Entonces, ¿qué da? Solo un descuido, ¿o me estoy perdiendo algo?
s ¿no es global, es una instancia -campo. –