2016-08-02 6 views
-3

Angenommen, ich habe eine C# Variable vom Typ SqlDbType (https://msdn.microsoft.com/en-us/library/system.data.sqldbtype(v=vs.110).aspx) wie BigInt. Der entsprechende .NET FrameWork-Typ ist Int64 (https://msdn.microsoft.com/en-us/library/cc716729(v=vs.110).aspx). Also der Wert, den ich will, ist default(Int64).ToString().Ist es möglich, einen SqlDbType in eine Zeichenfolgendarstellung des Standardwert des entsprechenden C# -Typs zu konvertieren?

Gibt es eine Möglichkeit, dies dynamisch zu tun (d. H. Keine Wand von switch Anweisungen verwenden)?

+0

Wenn Sie * haben eine Variable *, ist der Wert, den Sie wollen nicht 'that_variable.ToString()'? – GSerg

+0

Den Standardwert eines beliebigen Typs zu erhalten ist einfach - Sie tun das in Ihrer Frage. Deine Frage ist also nicht das, was du fragst. Sie fragen, ob es eine eingebaute Funktion gibt, um 'SqlDbType' in einen Framework-Typ zu konvertieren. Das ist nicht. –

Antwort

0

Die einfache Antwort ist nein, Sie müssen die Konvertierung manuell durchführen. Es gibt eine vollständige Liste SQL Server-Datentypzuordnungen here.

Der einfachste Weg, an den ich denken kann, besteht darin, ein paar Hilfsklassen zu erstellen, die sich um die Konvertierung kümmern. Die SqlExtension-Klasse enthält die ToType-Methode, mit der ein SqlDbType in Type konvertiert wird.

Die TypeExtensions-Klasse verfügt über eine Erweiterungsmethode zum Abrufen des Standardwerts eines Typs (der als Objekt zurückgegeben wird).

public static class TypeExtensions 
{ 
    public static object GetDefault(this Type t) 
    { 
     Func<object> f = GetDefault<object>; // quick hack to get generic method 
     return f.Method.GetGenericMethodDefinition().MakeGenericMethod(t).Invoke(null, null); 
    } 

    private static T GetDefault<T>() 
    { 
     return default(T); 
    } 
} 

Dann ist es nur eine Frage der Anrufe zusammen wie SqlDbType.Bit.ToType().GetDefault().ToString() Verkettungs

class Program 
{ 
    static void Main(string[] args) 
    { 
     var type = SqlDbType.Bit.ToType(); 
     Console.Write(SqlDbType.Bit.ToType().GetDefault().ToString()); 
    } 
} 
Verwandte Themen