Dieses Objekt ist ein integraler Typ. Kann ich seinen Wert in weniger als fünf Zeilen Code?

StackOverflow https://stackoverflow.com/questions/631994

  •  08-07-2019
  •  | 
  •  

Frage

Ich habe einen Datenleser. Ich mag den Wert in es mit dem Wert vergleichen 42. Ich weiß, es ist ein integraler Typ (zum Beispiel, was MySQL ruft INT, TINYINT, SMALLINT, MEDIUMINT, BIGINT, JUMBODELUXEINT, etc.). Ich will nicht den tatsächlichen Typen in dem C # -Code verdrahten. Das Beste, was ich gekommen bin mit ist

object x = reader.GetValue(i);
uint k = x is byte ? (byte) x
    : x is short ? (uint) (short) x
    : x is ushort ? (ushort) x
    : x is int ? (int) (int) x
    : (uint) x;
if (k == 42) { ... }

Das scheint unglaublich langatmig. Ich habe versucht, Equals aber unterschiedliche ganzzahlige Typen mit dem gleichen Wert unter Verwendung erscheinen nicht als gleich zu testen.

Gibt es einen besseren Weg?

War es hilfreich?

Lösung

Just checking Convert.ToUInt32(object) ... yup, es funktioniert:

using System;

class Test
{
    static void Main()
    {
        Check((byte)10);
        Check((short)10);
        Check((ushort)10);
        Check((int)10);
        Check((uint)10);
    }

    static void Check(object o)
    {
        Console.WriteLine("Type {0} converted to UInt32: {1}",
                          o.GetType().Name, Convert.ToUInt32(o));
    }
}

Mit anderen Worten, kann Ihr Code sein:

object x = reader.GetValue(i);
uint k = Convert.ToUInt32(x);
if (k == 42) { ... }

Als Alternative gegeben, dass alle uints sind darstellbare als longs, wenn Sie einen Datenleser verwenden könnten Sie reader.GetInt64(i) versuchen? Ich weiß es nicht ohne Weiteres, ob die Konvertierung für Sie getan werden, aber es ist wahrscheinlich ein Versuch wert.

Andere Tipps

if(Convert.ToUInt32(reader.GetValue(i)) == 42) { ... }

Sie könnten auch so Skeet und Daniels Antworten in umgekehrter Reihenfolge tun:

if (k == Convert.ChangeType(42, k.GetType()) { ... }

Ich habe es nicht obwohl getestet.

Ich bin mir nicht sicher, ob ich Dich richtig verstehe, aber ich denke, das sollte funktionieren:

int x = int.Parse(reader.GetValue(i).ToString());
if(x == 42) { // do your logic }

Sie können versuchen, diese:

unit k = Convert.ToUInt32(x);

Sie würden besser sein, Ihre Variablen bedient Umbenennung, though. 1 Buchstabe Variablen sooo letzte Woche .

Dies sollte funktionieren:

object x = reader.GetValue(i);

uint k;
try
{
    k = Convert.ToUInt32(x);
}
catch(InvalidCastException e) { ... }
if (k == 42) { ... }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top