J'ai une méthode d'extension que je voudrais surcharger pour pouvoir gérer à la fois les types de référence et les types de valeurs NULL. Quand j'essaye de faire ceci, cependant, je reçois "Le membre avec la même signature est déjà déclaré." Est-ce que C# n'utilise pas le qualificatif where
sur mes méthodes génériques pour les distinguer les unes des autres? La façon évidente de faire ce travail est de donner un nom distinct à chaque méthode, mais cela ne me semble pas une solution très élégante. Quelle est la meilleure façon de faire ce travail?Surcharge d'une méthode pour prendre en charge les types de référence et les types nullables
Exemple:
public static T Coalesce<T>(this SqlDataReader reader, string property) where T : class
{
return reader.IsDBNull(reader.GetOrdinal(property))
? null
: (T) reader[property];
}
public static T? Coalesce<T>(this SqlDataReader reader, string property) where T : struct
{
return reader.IsDBNull(reader.GetOrdinal(property))
? null
: (T?)reader[property];
}
// Usage
var id = reader.Coalesce<System.Guid?>("OptionalID");
Parfait! Marquez un pour l'équipe ObviousThingsIMissed. :) –
J'ai effectivement supprimé ce post pour commencer à penser que le casting provoquerait un problème de compilation - mais réalisé un peu plus tard qu'il est couvert tant que le type de propriété Item est object. : o –