2010-11-17 20 views
4

Y a-t-il une énumération dans C# qui contient les types de données C#? Alors que je peux définir une propriété dans une classe qui accepte le type de données (int, string) de l'utilisateur.C# Enum pour les types de données

+0

Je suis un peu peur à l'idée de la raison pour laquelle vous voudriez, mais non, je ne pense pas qu'il y est ... – annakata

+0

Avez-vous besoin d'un équivalent d'union en C#? –

Répondre

1

Il n'y a rien de tel dans le BCL.

Pourquoi en avez-vous besoin?

+0

Il y a DataType enum dans l'espace de noms System.ComponentModel.DataAnnotations mais il a des valeurs comme PhoneNumber, EmailAddress etc. – Novice

+1

@Daniel Joseph - ce ne sont pas seulement des types _primitive_, comme vous l'avez demandé. Et cet Enum est là pour prendre en charge les contrôles ASP.NET MVC et Dynamic Data (afin qu'ils puissent également être annotés pour être utilisés sur _other_ platforms). – Oded

+0

Il y a l'enum 'System.TypeCode' pour les types primitifs. –

1

En fonction de vos sons d'édition comme vous avez besoin generics mais je demande encore pourquoi une propriété serait un int ou une chaîne. Ce sont vraiment des choses très différentes qui ne peuvent que mener à la prévision. Voulez-vous simplement associer une valeur enum à une chaîne?

3

Vous souhaiterez peut-être utiliser l'attribut Description.

public enum MyEnum 
{ 
    [Description("My first value.")] 
    FirstValue, 
    [Description("My second value.")] 
    SecondValue, 
    [Description("My third value.")] 
    ThirdValue 
} 

private string GetEnumDescription(Enum value) 
{ 
    FieldInfo fi = value.GetType().GetField(value.ToString()); 
    DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false); 
    if (attributes.Length > 0) 
    { 
     return attributes[0].Description; 
    } 
    else 
    { 
     return value.ToString(); 
    } 
} 

Une autre possibilité pour définir une cartographie serait d'utiliser un Dictionary<int, string>.

2

Il existe une propriété booléenne de Type-type "IsPrimitive" qui peut vous aider.

0

Pourquoi avez-vous besoin de cela? La propriété est déjà un "filtre" pour le type de données qu'elle peut accepter.

Jetez un oeil à:

Overloading properties in C#

0

Malheureusement, le cadre n'a pas un tel ENUM, vous devrez créer à la main (comme nous l'avons fait que nous avons eu le même besoin que vous).

Cordialement.

+0

Génial. Alors ... comment avez-vous créé cette énumération? – Ellesedil

+0

Classe statique avec constantes avec les types. –

+0

Je suppose que je n'étais pas assez évident. Votre réponse pourrait être meilleure. Vous suggérez un chemin pour résoudre le problème sans aucun détail sur la façon de s'y prendre. Un exemple de code serait probablement utile pour faire passer votre message. – Ellesedil

3

Il y a le TypeCode Enumeration dans le système. On dirait qu'il couvre tous les types de base.

Vous pouvez obtenir le TypeCode pour tout objet en utilisant Type.GetTypeCode():

TypeCode typeCode = Type.GetTypeCode(anObject.GetType()); 
+0

Ceci devrait être la réponse acceptée. –