2013-07-18 9 views
11

Wie Wert int könnte von DataRow Zelle analysiert werden?Parsing int von DataRow Zelle

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

Dieser Code funktioniert, aber es sieht zu ausführlich aus. Auch ist es möglich, DBNull Werte zu handhaben?

+1

Nur sicher sein: Warum sagen Sie * Parse *? Ist der Typ von 'QuestionId' tatsächlich String-ähnlich, zum Beispiel' VARCHAR'? –

+0

Nein, ist die Art der QuestionID int. Aber was wäre, wenn es stringartig wäre? – Anthony

+0

Sie können Int32.TryParse – Denis

Antwort

22

Wenn Sie wissen, dass es ein int ist, sollten Sie es nur entsprechend werfen, das ist die sicherste und effizienteste Ansatz:

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

Die Field Methode unterstützt auch Nullable-Typen, also wenn es null sein könnte:

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

Wenn es ein wirklich string (warum?) Sie haben es zu string werfen und verwenden int.Parse:

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

Wenn Sie nicht wirklich wissen, was es Art ist, können Sie System.Convert.ToInt32 verwenden:

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

.NET 2.0 wird nicht unterstützt, oder? –

+1

@KhanhTO Nein, 'Feld' ist eine Erweiterungsmethode und wurde in 3.5 – sloth

+0

@KhanhTO hinzugefügt Nein, die' Feld 'Methode ist eine Erweiterungsmethode, die nur in .NET 3.5 + –

7

Wenn in diese Zelle gesetzt wird eigentlich ist, was nur ein int, zu verwenden:

(int)item["QuestionId"] 

Andernfalls überprüfen sie den Laufzeittyp des Wertes item["QuestionId"], wenn es ein byte zum Beispiel, verwenden (byte)item["QuestionId"]. Wenn Sie nicht sicher sind, dann:

wird wahrscheinlich funktionieren, aber das ist weniger elegant.

+0

@Wouter Huysentruit: Wird eine Ausnahme ausgelöst, wenn ein NULL-Wert vorhanden ist? –

+0

Wenn 'null' keine Ausnahme auslösen darf, beachte '(int?) Item [" QuestionId "]'. –