4 Stimmen

Unterschied zwischen (int) und convert.toint32 in c#

Wenn ich ein Objekt in int konvertiere, indem ich

(int)object

dann, wenn das Objekt Wert 0 ist, dann gibt er mir Fehler, dass bestimmte Besetzung nicht gültig.

Wenn ich ein Objekt in int konvertiere, indem ich

convert.toint32(object)

dann funktioniert er und gibt mir 0 bedeutet, dass der Wurf gültig ist.

und ich möchte wissen, was der Unterschied zwischen beiden ist.

1. (int)object
2.convert.toint32(object)

13voto

Dean Harding Punkte 69243

(int) Werke nur wenn das Objekt tatsächlich ist eine ganze Zahl. Zum Beispiel, (int) "12" führt zu einer ungültigen Cast-Ausnahme.

Convert.ToInt32 versucht am besten, das, was Sie ihm geben, in eine ganze Zahl umzuwandeln. Also Convert.ToInt32("12") wird 12 zurückgegeben. Um genau zu sein, wenn das Objekt Folgendes implementiert IConvertible (was System.String tut), dann Convert.ToInt32 ruft die IConvertible.ToInt32 Methode.

4voto

this. __curious_geek Punkte 41801

Beide Methoden sind völlig unterschiedlich. Die erste ist casting und die zweite ist conversion .

Conversion wird verwendet, wenn ein non-integer Wert muss in int umgewandelt werden.

Casting wird verwendet, um unbox die Instanz zurück zu int wenn die Instanz bereits ein Typ von int eingepackt Object Typ.

3voto

Marc Gravell Punkte 970173

Im allgemeinen Sinne, (Type)val darstellen kann:

  • eine eingebaute Konvertierung (z. B. zwischen einem Float und einem Int), die von der Sprache definiert wird
    • die möglicherweise eine tatsächliche Operation erfordern (float <===> int ist ein gutes Beispiel)
    • oder nur für den Bienenstock des Compilers (int <===> an-int-enum, zum Beispiel)
  • ein Referenz-Cast (der niemals die Referenz oder das Objekt ändert; es wird lediglich der lokale Handle darauf geschrieben)
    • die möglicherweise eine Typüberprüfung erfordern (z. B. Objekt ===> IDataReader)
    • aber bereits als wahr bekannt sein könnte (z. B. IDataReader ===> Objekt)
  • eine Boxing- / Unboxing-Operation (die immer einen Wert-Typ initialisiert oder ein neues Objekt auf dem Heap erzeugt [außer beim Null-Boxing eines Nullable<T> ]
  • ein typdefinierter Konvertierungsoperator (implizit oder explizit), der den im Typ definierten Code ausführt

Angesichts einer object Wert, der (int)object wird davon ausgehen, dass es sich um eine Unboxing Operation, funktioniert also nur, wenn das Objekt ist eine Schachtel int (oder ein boxed int-enum). Es schlägt fehl, wenn der Objektwert tatsächlich eine Zeichenkette oder ein boxed- float usw.

Convert.ToInt32 arbeitet anders; es führt eine Reihe von Tests durch, um zu versuchen, Dinge wie casting-from-a-float (oben behandelt) und das Parsen eines Strings (der auf int.Parse ).

2voto

SWeko Punkte 29544

Es gibt zwei Szenarien, in denen (int) something funktioniert:

  1. En something ist ein int, das in ein Objekt gepackt wurde, und wir verwenden den Aufruf, um es zu entpacken. Dies ist, was passiert, wenn Sie die int in eine ArrayList, oder in HttpSession, etc...

  2. En something ist nicht ein int, aber sein Typ kann explizit in einen int umgewandelt werden, z. B. short, long, float der eingebauten Typen oder ein Typ, der den expliziten Cast-Operator implementiert hat.

Convert.ToInt32 ruft dagegen einfach something Die Methode IConvertible.ToInt32 ist mehr oder weniger gleichbedeutend mit int.Parse(something)

2voto

ManiacZX Punkte 827

Es gibt viele Möglichkeiten, in einen int zu konvertieren, viel hängt davon ab, was Ihre Quelle ist.

Das Wichtigste ist die Fehlerkontrolle. Keine der Methoden ist für sich allein genommen narrensicher, so dass Sie entscheiden müssen, wie Sie vorgehen wollen.

Casting mit (int), Konvertierung mit Convert.ToInt32(), Parsing mit int.Parse() können Ausnahmen wie InvalidCastException, FormatException und OverflowException erzeugen und sollten try/catch verwenden, um fehlgeschlagene Ergebnisse zu behandeln.

Das Parsen mit int.TryParse() liefert ein true/false-Ergebnis, ob das Parsen erfolgreich war, und setzt im Erfolgsfall den Wert auf den im Funktionsaufruf angegebenen out-Parameter.

Wenn Sie wirklich versuchen, ein beliebiges Objekt zu nehmen und es in eine int zu verwandeln, sind Sie wahrscheinlich am besten mit Convert.ToInt32 wie:

public void TestFunction(object input)
  try {
    int value = Convert.ToInt32(input);
    SomeOtherFunction(value);
  }
  catch (Exception ex) {
    Console.WriteLine("Could not determine integer value");
  }
}

Eine andere Möglichkeit wäre, sich darauf zu verlassen, dass das Objekt einen brauchbaren Wert in .ToString() erzeugt, wie z.B.:

public void TestFunction(object input)
  try {
    int value = int.Parse(input.ToString());
    SomeOtherFunction(value);
  }
  catch (Exception ex) {
    Console.WriteLine("Could not determine integer value");
  }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X