2010-11-17 117 views
4

是否有任何枚舉在C#中持有C#數據類型。所以我可以在一個接受用戶的數據類型(int,string)的類中定義一個屬性。C#枚舉的數據類型

+0

我在爲什麼你要想到這有點害怕,但沒有我不認爲有是... – annakata 2010-11-17 11:59:43

+0

你需要在C#中的工會等效嗎? – 2010-11-17 12:01:23

回答

1

在BCL中沒有這樣的東西。

爲什麼你需要它?

+0

在命名空間System.ComponentModel.DataAnnotations中有DataType枚舉,但它具有類似PhoneNumber,EmailAddress等的值。 – Novice 2010-11-17 12:00:22

+1

@Daniel Joseph - 這些不僅僅是_primitive_類型,正如您所詢問的那樣。而且這個Enum支持ASP.NET MVC和動態數據控件(因此它們也可以在_other_平臺上註釋使用)。 – Oded 2010-11-17 12:02:21

+0

原始類型有'System.TypeCode'枚舉。 – 2018-02-12 16:15:10

1

根據你的編輯聲音,你需要generics但我仍然質疑爲什麼一個屬性可以接受是一個int或一個字符串。這些都是非常不同的事情,只能導致上傳。

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」的布爾型屬性希望這可以幫助你。

0

不幸的是,框架沒有這樣的枚舉,你將不得不手動創建它(因爲我們沒有,因爲我們有相同的需求,因爲你)。

問候。

+0

太好了。所以......你是如何創建這個枚舉的? – Ellesedil 2015-11-20 01:48:41

+0

帶有常量的靜態類與類型。 – 2015-11-20 06:51:12

+0

我想我並不明顯。你的答案可能會更好。你提出瞭解決問題的途徑,沒有任何關於如何去解決問題的細節。一個代碼示例可能對您的觀點很有幫助。 – Ellesedil 2015-11-20 07:06:04

3

系統中有TypeCode Enumeration。看起來它涵蓋了所有的基本類型。

可以使用Type.GetTypeCode()獲取任何對象的TypeCode:

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

這應該是被接受的答案。 – 2018-02-12 16:15:29