25 votes

Déterminer si un paramètre générique est un type Nullable

J'ai la fonction VB.NET suivante, par exemple :

Public Function MyFunction (Of TData) (ByVal InParam As Integer) As TData

End Sub

Comment puis-je, dans une fonction, déterminer si TData est un Type NULLable ?

43voto

Jon Skeet Points 692016

Une façon de le faire :

If Nullable.GetUnderlyingType(GetType(TData)) <> Nothing

... du moins, le C# l'est :

if (Nullable.GetUnderlyingType(typeof(TData)) != null)

Cela suppose que vous demandez s'il s'agit d'un type de valeur nullable. Si vous demandez si c'est un type de valeur nullable ou une classe alors la version C# serait :

if (default(TData) == null)

mais je ne suis pas sûr qu'une simple traduction en VB fonctionnerait ici, car "Nothing" est légèrement différent en VB.

7voto

Dennis Traub Points 24186

VB.net :

Dim hasNullableParameter As Boolean = _
        obj.GetType.IsGenericType _
        AndAlso _
        obj.GetType.GetGenericTypeDefinition = GetType(Nullable(Of ))

C# :

bool hasNullableParameter = 
        obj.GetType().IsGenericType && 
        obj.GetGenericTypeDefinition().Equals(typeof(Nullable<>));

2voto

Jason Points 125291

Vous pourriez utiliser le code donné dans ce réponse ajouter une extension

public static bool IsNullable(this Type type) {
    Contract.Requires(type != null);
    return type.IsDerivedFromOpenGenericType(typeof(Nullable<>));
}

et dire

bool nullable = typeof(TData).IsNullable();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X