2013-08-09 11 views
8

Come verificare il numero intero in una riga?Controllo intero con ternario

sample.AddRange(Statistics.Select(player => new Stats 
         { 
         SeasonFromYear = Convert.ToInt32(seasonFromYear) 
         } 

Questo funziona per me.

int a; 
SeasonFromYear = int.TryParse(seasonFromYear, out a) ? a : default(int); 

Ma per ogni proprietà ho bisogno di dichiarare una variabile come a. Senza questo è possibile controllare in una riga?

Qualcosa di simile

sample.AddRange(Statistics.Select(player => new Stats 
         { 
         SeasonFromYear = is integer ? then value : else default value 
         } 

risposta

6

È possibile creare metodo di estensione:

public static int ToInt(this string v) 
{ 
    int a = 0; 
    int.TryParse(v, out a); 
    return a; 
} 

E poi:

int number = "123".ToInt(); 

Modifica

Oppure si può passare intero come parametro di:

public static bool ToInt(this string v, out int a) 
{ 
    return int.TryParse(v, out a); 
} 

utilizzo:

int number = 0; 
"123".ToInt(out number); 
4

Questo non è necessario. Se int.TryParse non riesce, a verrà impostato su default(int). Basta usare:

int a; 
int.TryParse(sessionFromYear, out a); 
SeasonFromYear = a; 

Oppure, se si vuole veramente farlo in una sola riga, dovreste creare sei proprio metodo involucro:

public static int TryParseInline(string in) { 
    int a; 
    int.TryParse(sessionFromYear, out a); 
    return a; 
} 

... 

sample.AddRange(Statistics.Select(player => new Stats 
{ 
    SeasonFromYear = Util.TryParseInline(seasonFromYear), 
    ... 
}) 
+1

perché non solo 'int.TryParse (sessionFromYear, fuori SessionFromYear)'? – Pawel

+0

Grazie, quello che ho davvero chiesto di farlo in una riga. –

+0

+1, Sì, questo fa qualcosa di valido ... –

0

Prova:

int.TryParse(sessionFromYear, out SessionFromYear) 

Se SessionFromYear può essere una proprietà, basta creare un metodo che faccia ciò che è necessario fare, ad esempio:

public int ParseInt(string input) 
{ 
    int value; 
    int.TryParse(input, out value); 

    return value; 
} 

e quindi è possibile utilizzare questo metodo in tutto il posto come questo:

SessionFromYear = ParseInt(sessionFromYear); 

se si vuole fare davvero di fantasia si potrebbe anche creare un metodo di estensione sulla classe string e poi basta fare qualcosa di simile sessionFromYear.ToInt()

+0

Questo restituirà 'bool' come valore, ma in realtà ho bisogno del valore' int' da restituire. Puoi verificare ancora la mia domanda? L'ho aggiornato –

+0

modificato la risposta: è sufficiente creare un metodo che faccia ciò di cui si ha bisogno e quindi utilizzarlo ovunque. – Pawel

+0

ok grazie ...... –

1

Hai provato a utilizzare un cast sicuro e un controllo a coalescenza nulla in una singola riga?

SeasonFromYear = seasonFromYear as int ?? default(int); 
+0

Grazie, restituirà un errore se l'analisi non riesce su 'seasonFromYear come int'? –

+0

La trasmissione sicura non restituisce un errore. Tuttavia, questo non funzionerà come ho descritto. I numeri interi non sono annullabili e non possono essere espressi in questo modo. –

+0

Cosa intendevi? Quindi non restituirà l'errore. Funzionerà nel modo in cui ho bisogno? –