2012-04-12 10 views
0

Ich habe in meinem Programm Codeabschnitt folgt:C# Objekt und String-Konvertierung

object val; 
val = arr[1].Trim(); // in my case i am getting value here is 1.00 

jetzt, wenn ich Wert auf einen datarow bin Zuweisung Ich erhalte Fehler

Erwartete int64 Wert.

datarow[Convert.ToString(drow["col"]).Trim().ToUpper()] = val; 

Ich bin vor kein Problem, wenn der Wert immer andere, dass 1,00.

Was könnte das genaue Problem sein? Wie kann ich es lösen?

Vorschläge und Lösungen sind willkommen

+1

Welche Art von ist würde? Int, Schnur, foo? – basti

+0

Unzureichender Code, um eine sinnvolle Antwort zu geben. Was ist drow ["col"]? Verwenden Sie den Inhalt eines Datarows, um die Spalte eines anderen Datarows zu indizieren? – Steve

+0

col ist nichts anderes als ein String Spaltenname der Datentabelle, ja Steve ich benutze Inhalt eines Datarow, um die Spalte eines anderen Datarow zu indizieren. – Pramod

Antwort

0

Wenn die Spalte in der Datentabelle ist eine Int64 erwarten Sie val (das ist eine Zeichenfolge) zu einem Int64 konvertieren müssen:

var val = arr[1].Trim(); // String at this point 
long longVal = 0; 
if(!long.TryParse(val,out longVal){ 
    throw new InvalidOperationException("value wasnt an Int64!"); 
} 
datarow[Convert.ToString(drow["col"]).Trim().ToUpper()] = longVal 
+0

Danke für Antwort .. Ich versuchte dies mit meinem Code, TryParse akzeptiert Zeichenfolge und val ist ein Objekt, so dass Fehler von falschen Arten von Argument .. – Pramod

+0

@ Pramod - Nein, val ist eine Zeichenfolge - Sie haben es gerade als Objekt eingegeben . Ich weiß, dass es eine Zeichenkette ist, weil der Rückgabewert von 'Trim()' eine Zeichenkette ist. – Jamiec

0

arr [1] scheint String sein, und das Anwenden von .Trim() behält es als eine Zeichenkette, selbst wenn es "1.00" ist. Wenn Sie eine ganze Zahl benötigen, müssen Sie sie analysieren. Es kann jedoch nicht zu einem Integer geparst werden, weil es tatsächlich ein Double ist.

Als Beweis, ob ich richtig bin oder nicht, können Sie versuchen (Int64) double.Parse (val) und das sollte funktionieren. Es liegt jedoch an Ihnen zu entscheiden, ob dies für Ihr Programm nicht relevant ist. Es gibt zwei mögliche Probleme:

  1. val nicht zu analysieren-fähig zu verdoppeln könnte, wobei in diesem Fall eine Ausnahme
  2. val bekommen könnte eine doppelte sein, aber nicht eine, die als int dargestellt werden kann (auch groß oder Präzision ex verlieren. "1.8" 1) das Array

hoffe, das hilft

+0

val in meinem Fall kann verschiedene Werte haben, es kann E-Mail-Adresse, Telefonnummer oder Betrag haben, wenn es in der Kategorie der Betrag fällt und seine Vaues ist 1.00 Ich habe Fehler. – Pramod

+0

Sind sie alle int64? Wenn ja, dann steht das obige, mit der hinzugefügten Änderung, die Sie brauchen, um dieses Objekt zuerst in String umzuwandeln, dh (Int64) double.Parse ((string) val)) –