C#数据类型枚举

8

在C#中是否有一个包含C#数据类型的枚举类型?这样我就可以在类中定义一个属性,接受用户传递的数据类型(如int、string)。


我有点担心你为什么想要这个,但是我认为没有... - annakata
你需要C#中的联合(Union)等效物吗? - Bogdan Maxim
6个回答

7

在System中有TypeCode枚举,它似乎涵盖了所有基本类型。

您可以使用Type.GetTypeCode()获取任何对象的TypeCode:

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

3

您是否想要将枚举值与字符串关联起来?您可能希望使用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();
    }
}

定义映射的另一种可能性是使用 Dictionary<int, string>


2

有一个名为 "IsPrimitive" 的布尔属性属于类型 "Type",希望这能帮到你。


1

根据您的编辑,似乎您需要 泛型,但我仍然质疑为什么一个属性可以接受 int 或 string。这些是非常不同的东西,只能导致向上转换。


0

在BCL中没有类似的东西。

你为什么需要它?


1
在命名空间System.ComponentModel.DataAnnotations中有一个DataType枚举,但它的值是像PhoneNumber、EmailAddress等。 - Novice
1
@Daniel Joseph - 这些不仅仅是你所询问的_原始_类型。这个枚举类型是为了支持ASP.NET MVC和Dynamic Data控件(以便它们可以被注释用于_其他_平台)。 - Oded
1
有一个 System.TypeCode 枚举用于基本类型。 - Olivier Jacot-Descombes

0

你为什么需要那个?该属性本身已经是一个“过滤器”,可以确定它所接受的数据类型。

可以参考:

C#中的属性重载


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接