2011-05-04 13 views
9

salté en este accidente y no tienen idea de por qué esto está ocurriendocadena inicializado parece contener String.Empty

string sample = "Hello World"; 
if (sample.Contains(string.Empty)) 
{ 
    Console.WriteLine("This contains an empty part ? at position " + sample.IndexOf(string.Empty)); 
    Console.WriteLine(sample.LastIndexOf(string.Empty)); 
    Console.WriteLine(sample.Length); 
} 

salida

This contains an empty part ? at position 0

10

11

Estoy contento con la última parte, pero no tengo idea de por qué esto se evalúa como verdadero. Incluso Indexof y LastIndexOf tienen valores separados.

¿Alguien podría ayudarme en por qué es esto así?

EDITAR

Creo que esto es un poco relevante a mi pregunta y también sería útil para aquellos que se tropiezan con esta pregunta.

ver este enlace SO: Why does "abcd".StartsWith("") return true?

Respuesta

16

De MSDN para IndexOf

Si el valor es String.Empty, el regreso valor es 0.

Para LastIndexOf

Si el valor es String.Empty, el valor de retorno es la última posición de índice en esta instancia.

Para Contains

cierto si el parámetro de valor se produce dentro de esta cadena, o si el valor es la cadena vacía ("");

+0

@ SwDevMan81: ¿no debería ser 11 en lugar de 10? – V4Vendetta

+0

@ V4Vendetta - el último índice es 10 (0 a 10 son 11 caracteres) – SwDevMan81

+0

@ SwDevMan81: lo siento, mi error no fue "índice", por lo que implica que para cualquier cadena como se indica arriba, la cadena siempre se resolverá como verdadera (Estaría encantado de saber si hay un caso excepcional) – V4Vendetta

4

Pregunta: ¿La cadena "Hello World" contiene String.Empty?

Respuesta: Sí.

Todas las cadenas posibles contienen String.Empty, por lo que su prueba se devuelve correctamente.

Si usted está tratando de probar si su cadena está vacía, entonces el código siguiente es lo que quiere

if (string.IsNullOrEmpty(sample)) 
{ 

} 
1

Esto está documentado en el String.Contains Method:

Valor de retorno
Tipo: System.Boolean
true si el parámetro de valor se produce dentro de esta cadena, o si el valor es la cadena vacía (""); de lo contrario, false.

Y en String.IndexOf Method

Si el valor es String.Empty, el valor de retorno es 0.

Y en LastIndexOf Method

Si el valor es String.Empty, el valor de retorno es la última posición de índice en esta instancia.

Cuestiones relacionadas