2009-05-15 11 views
2

Je semble avoir descendu un trou de lapin. Je voudrais convertir les données des ensembles de données ADO .NET en un type Nullable. Au début, j'ai supposé qu'un casting droit (int?) Le ferait. Comme j'étais naïf. Mauvais, très mal. Maintenant j'essaye d'écrire un convertisseur générique mais je suis accroché à la syntaxe. C'est ainsi 2005 - quelqu'un a déjà résolu ce problème. Avez-vous?Folie ADO.NET et Types Nullables

Raccrocher est que lorsque je tente d'utiliser un type Nullable comme sur la contrainte du convertisseur je reçois une erreur de syntaxe:

public class NullableDBConversion 
{ 
    public static T Convert<T>(object testValue) where T : Nullable<T> 
    { 
    if (testValue is DBNull) 
    { 
     return new Nullable<T>(); 
    } 

    return new Nullable<T>((T)testValue); 
    } 
} 

L'objectif ont une seule méthode en utilisant les médicaments génériques pour faire toutes les conversions. Est-ce possible ou dois-je en écrire plusieurs?

Répondre

7

T : Nullable<T> n'a pas vraiment de sens en tant que contrainte - pensez à ce que devrait être T; il ne peut pas être nul de lui-même. Vous pourriez avoir:

where T : Nullable<U> where U : struct 

mais cela serait quelque peu obscur. Je pense qu'il est plus facile de faire T le type non-nullable et il suffit de se référer à Nullable<T>. Je pense que vous voulez ceci:

public static Nullable<T> Convert<T>(object testValue) where T : struct 
{ 
    return testValue is DBNull ? null : new Nullable<T>((T)testValue); 
} 
Questions connexes