2010-01-19 7 views
9

Wie kann ich 0 als ganzzahligen Wert von (int)null bekommen.Ich möchte "(int) null", um mich zurückgeben 0

EDIT 1: Ich möchte eine Funktion erstellen, die mir Standardwerte für Null-Darstellung in ihren jeweiligen Datentypen zurückgibt.

EDIT 2: Wie kann ich für die Verwendung vonStandard in diesem Szenario arbeiten.

(int) Wert

Wo Wert Null sein kann oder eine ganze Zahl Wert. Ich kenne den Datentyp zur Laufzeit nicht. Aber ich werde sicherstellen, dass Wert nur Null oder Integer-Wert enthalten sollte.

Antwort

21

Sie die Nullable Struktur

int value = new Nullable<int>().GetValueOrDefault(); 

Sie auch die 2. bearbeiten können default Stichwort

int value = default(int); 

Folgende verwenden:

Sie eine Funktion benötigen, die jede Art von Parameter zu erhalten, So wird das Objekt verwendet.Ihre Funktion ist ähnlich der Field<T> Erweiterungsmethode auf einem DataRow

public static T GetValue<T>(object value) 
{ 
    if (value == null || value == DBNull.Value) 
     return default(T); 
    else 
     return (T)value; 
} 

diese Funktion verwenden, wenn Sie einen int wollen (und Sie Wert erwarten einen int zu sein) Sie nennen es mag:

int result = GetValue<int>(dataRow["Somefield"]); 
+0

Ich stimme zu. Keine Notwendigkeit, das Rad neu zu erfinden - verwenden Sie die Erstellungssprache - NULL-Typen. –

+0

@ Pierre-Alain Vigeant: Benötigen Sie weitere Erläuterungen zu "new Nullable () .GetValueOrDefault();" worüber und wie es funktioniert. Ich bin etwas verwirrt mit weiß nicht über diese Art von Syntax-Code –

+4

@ ShantanuGupta Ein Nullable Typ wie 'Int?' Bietet eine Methode namens GetValueOrDefault(). Diese Methode gibt den Wert zurück, wenn es nicht null oder der Standardwert des Typs ist (0 für ein int), wenn der Wert null ist. –

0

Sie können null nicht an ein int übergeben, da int ein Werttyp ist. Sie kann es auf eine int? werfen, obwohl.

Was möchten Sie erreichen?

+0

@thecoop: Ich versuche, eine allgemeine Funktion für die Rückgabe eines Standardwerte für alle Datentypen zu machen. –

34

Sie können die default Schlüsselwort verwenden den Standardwert eines beliebigen Datentyps zu erhalten:

int x = default(int);  // == 0 
string y = default(string); // == null 
// etc. 

Dies auch mit generischen Parametern arbeitet:

Bar<T> Foo<T>() { 
    return new Bar<T>(default(T)); 
} 

Falls Sie eine Variable vom Typ object die null oder einen Wert vom Typ int, können Sie es nullable types verwenden und die ?? operator zu konvertieren sicher auf eine ganze Zahl enthalten:

int a = 42; 
object z = a; 
int b = (int?)z ?? 0;  // == 42 
int c = (int?)null ?? 0;  // == 0 
+3

+1: und Sie müssen es auch nicht seine eigene Funktion machen. –

+1

+1 für die ?? Operator. –

+0

+1, wusste nicht über das Standardschlüsselwort. – iandisme

1

Eine generische Methode, die eine Cast-Instanz eines Objekts oder den Standardwert zurückgibt, könnte folgendermaßen implementiert werden:

static T Cast<T>(object value) { 
    if (value is T) 
     return (T)value; 
    else 
     return default(T); 
} 

diese Weise einen gültigen Wert verwendet, wird der Wert selbst ergeben:

int value = Cast<int>(4); //value = 4 

und einen Nullwert erhalten die Standard:

int value = Cast<int>(null); //value = 0 

Beachten Sie, dass die Methode verwendet, da Objekt als Argument Dies führt zu einem Boxing, wenn es mit Strukturobjekten (wie int) verwendet wird.

0

Verfahren zur Herstellung einer generischen Klasse, die nichts zurückgibt funktionieren:

Class GetNull(Of T) 
     Public Shared Function Value() As T 
      Return Nothing 
     End Function 
End Class 



Debug.Print(GetNull(Of Integer).Value()) 
0

Sie erhalten eine Rückgabetyp Nullable(Of Integer) benötigen.

Verwandte Themen