2009-12-16 3 views
1

Comment pourrais-je éviter ce dictionnaire (ou le créer dynamiquement)?Une manière intelligente de trouver le type nullable correspondant?

Dictionary<Type,Type> CorrespondingNullableType = new Dictionary<Type, Type> 

{ {typeof (bool), typeof (bool?)}, {typeof (octet), typeof (octet?)}, {typeof (sbyte), typeof (sbyte?)}, {typeof (char), typeof (char?)}, {typeof (décimal), typeof (décimal?)}, {typeof (double), typeof (double?)}, {typeof (flottant), typeof (float?)}, {typeof (entier), typeof (entier?)}, {typeof (uint), typeof (uint?)}, {typeof (long), typeof (long?)}, { typeof (ulong), typeof (ulong?)}, {typeof (court), typeof (court?)} , {typeof (ushort), typeof (ushort?)}, {typeof (Guid), typeof (Guid?)}, };

+0

Pourriez-vous s'il vous plaît expliquer la raison pour laquelle vous avez un tel dictionnaire? Qu'essayez-vous de faire? –

Répondre

6

Vous voulez faire quelque chose comme:

Type structType = typeof(int); // or whatever type you need 
Type nullableType = typeof(Nullable<>).MakeGenericType(structType); 

Pour obtenir le Nullable<T> correspondant à T (dans cet exemple donné, int)

+0

Merci, c'est ce que je cherchais. –

2

type? est juste du sucre syntaxique pour le type Nullable <>.

Sachant cela, vous pouvez faire quelque chose comme ceci:

public Type GetNullableType(Type t) 
{ 
    return typeof(Nullable<>).MakeGenericType(t); 
} 
2

Utilisez une méthode simple de génériques:

public Type GetNullable<T>() where T : struct 
{ 
    return typeof(Nullable<T>); 
} 

Cela devrait retourner le type nullable pour tout type que vous passez.

+0

C'était ma première idée, mais je n'ai pas le 'T' au moment de la compilation, mais juste une instance de' System.Type'. –

+0

Vous n'avez pas besoin de T au moment de la compilation - c'est la merveille des génériques. –

Questions connexes