2013-10-02 14 views
5

// Ciao, sto cercando di far funzionare il mio codice confrontandolo se una stringa è più grande o meno di 10, ma non funziona correttamente. Scrive 10 o più, anche se il valore è inferiore a 10.Stringa C# maggiore o uguale stringa di codice

int result = string1.CompareTo("10"); 
if (result < 0) 
{ 
    Console.WriteLine("less than 10"); 
} 
else if (result >= 0) 
{ 
    Console.WriteLine("10 or more"); 
} 
+0

Intendi 'stringa' o' stringa.Lunghezza'? –

risposta

21

Una stringa non è un numero, quindi si sta confrontando lessicografico (da sinistra a destra). String.CompareTo viene utilizzato per l'ordine, ma si noti che "10" è "inferiore" a "2" poiché il char 1 è già inferiore rispetto al char 2.

suppongo quello che vuoi vuoi è quello di convertirlo in un int:

int i1 = int.Parse(string1); 
if (i1 < 10) 
{ 
    Console.WriteLine("less than 10"); 
} 
else if (i1 >= 10) 
{ 
    Console.WriteLine("10 or more"); 
} 

nota che si dovrebbe usare int.TryParse se string1 potrebbe avere un formato non valido. In quel modo si evita un'eccezione a int.Parse, ad esempio:

int i1; 
if(!int.TryParse(string1, out i1)) 
{ 
    Console.WriteLine("Please provide a valid integer!"); 
} 
else 
{ 
    // code like above, i1 is the parsed int-value now 
} 

Tuttavia, se si desidera invece controllare se una stringa è più o più breve di 10 caratteri, è necessario utilizzare è Length proprietà:

if (string1.Length < 10) 
{ 
    Console.WriteLine("less than 10"); 
} 
else if (string1.Length >= 10) 
{ 
    Console.WriteLine("10 or more"); 
} 
+1

La soluzione è corretta, ovviamente. Il modo in cui 'CompareTo' funziona con le stringhe è complesso e utilizza un confronto sensibile alla cultura e non è un semplice ordinamento lessicografico in tutti i casi. Ad esempio, in molte culture .NET, un trattino '-' sarà ignorato. Quindi '" -12 ".CompareTo (" 10 ")' è come '" 12 ".CompareTo (" 10 ")', restituisce un intero positivo ('1'). E '" -1 ".CompareTo (" 10 ")' come '" 1 ".CompareTo (" 10 ")' è negativo ('-1'). Ci sono culture .NET dove questo è diverso, anche se ne dubito. –

+3

'else if ...' sembra un po 'ridondante :) – Silvermind

+1

Penso che farei una tripletta nel caso non sia un numero. Quindi mantieni il resto se e disponi di un altro per questa eccezione. –

Problemi correlati