2013-07-18 10 views
11

Come si può analizzare il valore int dalla cella DataRow?Analisi per int dalla cella DataRow

Int32.Parse(item["QuestionId"].ToString()); 

Questo codice funziona, ma sembra troppo prolisso. Inoltre è possibile gestire i valori DBNull?

+1

Solo per essere sicuri: perché dici * parse *? Il tipo di 'QuestionId' è in realtà simile a una stringa, ad esempio' VARCHAR'? –

+0

No, il tipo di QuestionId è int. Ma se fosse simile a una corda? – Anthony

+0

È possibile utilizzare Int32.TryParse – Denis

risposta

22

Se si sa che si tratta di un int si dovrebbe solo lanci di conseguenza, questo è l'approccio più sicuro e più efficiente:

int questionId = item.Field<int>("QuestionId"); // similar to (int) item["QuestionId"] 

Il metodo Field supporta anche tipi nullable, quindi se potesse essere nullo:

int? questionId = item.Field<int?>("QuestionId"); 
if(questionId.HasValue) Console.Write(questionId.Value); 

Se in realtà è un string (perché?) si deve gettarlo ai string e utilizzare int.Parse:

0.123.
int questionId = int.Parse(item.Field<string>("QuestionId")); 

Se davvero non so che cosa è il tipo è, è possibile utilizzare System.Convert.ToInt32:

int questionId = System.Convert.ToInt32(item["QuestionId"]); 
+0

.NET 2.0 non supporta, vero? –

+1

@KhanhTO No, 'Field' è un metodo di estensione ed è stato aggiunto in 3.5 – sloth

+0

@KhanhTO no, il metodo' Field 'è un metodo di estensione disponibile solo in .NET 3.5+ –

7

Se ciò che viene messo in quella cella è in realtà solo un int, uso:

(int)item["QuestionId"] 

Altrimenti, controllare il tipo di runtime del valore item["QuestionId"], ad esempio, se è un byte, utilizzare (byte)item["QuestionId"]. Se non sei sicuro, allora:

Convert.ToInt32(item["QuestionId"]) 

probabilmente funzionerà, ma è meno elegante.

+0

@Wouter Huysentruit: verrà generata un'eccezione se è presente un valore NULL? –

+0

Se 'null' non deve generare un'eccezione, si consideri' (int?) Item ["QuestionId"] '. –

Problemi correlati