2009-08-26 13 views
0

Ich bin mir sicher, dass dies schon einmal gefragt wurde, aber meine Durchsicht der Suchtreffer für ähnliche Fragen ergab keine Antwort.Typ Inferenz in Erweiterungsmethode

Ich bin es leid zu überprüfen, ob Nullable einen Wert hat. Warum kann ich myNullable<int> yourAge nicht zu int myAge zuweisen und eine Ausnahme erhalten, wenn yourAge null ist? Wenn eines unserer verdammten Zeitalter null ist, warum muss ich dann eine Überprüfung durchführen, um zu vermeiden, dass 'default' einem fxnenden SqlParameter zugewiesen wird? Ich kann nicht einmal eine zivilisierte mySqlParm = myAge.HasValue ? myAge.Value : DBNull.Value tun.

Was ist der Fixpunkt von nullbaren Typen? Wir müssen immer noch -1 für eine pkId verwenden, um die gefürchtete Null zu vermeiden. Wir können nicht einmal unsere eigenen Erweiterungen hinzufügen, weil 'blah blah'.

Wieso nervt überhaupt überhaupt jemand mit Parametern? Warum speichern wir nicht einfach alle Daten als fxning varchar (10)?

+2

Wow, du bist wütend –

+0

Was Ihre Frage ist? Was hat Nullable mit der Datenbank zu tun? –

+1

vielleicht "Typ Rückschluss in einer Extension-Methode" ist, was Sie inspiriert, dies zu schreiben, aber es ist nicht der richtige Titel für diesen Beitrag, wie es ist. –

Antwort

6

Warum kann ich nicht zuordnen myNullable<int> yourAge-int myAge und erhalten eine Ausnahme, wenn yourAge null ist?

Natürlich können Sie. Verwenden Sie einfach die Value-Eigenschaft, ohne überprüfen zuerst:

int myAge = yourAge.Value; 

Wenn yourAge null enthält Sie eine Ausnahme erhalten.

+0

Dank @Guffa, kam mir nie in den Sinn, geblendet von anderen Komplexitäten. – ProfK

3

Vielleicht möchten Sie so etwas tun?

public static object GetDatabaseValueFromNullableType<T>(this T? value) 
    where T: struct 
{ 
    return value.HasValue ? (object) value.Value : DBNull.Value; 
} 

und dann können Sie es wie so verwenden:

//this is just a test I wrote but you get the idea 
[Test] 
public void NullableTest() 
{ 
    int? something = null; 
    var value = something.GetDatabaseValueFromNullableType(); 
    Assert.IsTrue(value == DBNull.Value); 
} 
+0

+1 für das testbasierte Beispiel. Du verdienst ein Kopfgeld, aber das kann ich nur bei meiner nächsten Frage tun. Bleib dran. :-) – ProfK

Verwandte Themen