2013-04-16 45 views
13

Tôi đang cố gắng để thực hiện một chức năng mà chúng ta có thể nhận được Namevalue của một EnumValueLấy tên của giá trị Enum

Ví dụ:

Get_Enum_ValueName(DayOfWeek, 0) 

... Đây sẽ trở lại "chủ nhật ".

Nhưng mã của tôi không hoạt động, nó nói kiểu không được định nghĩa:

Private Function Get_Enum_ValueName(Of T)(ByVal EnumName As T, ByVal EnumValue As Integer) As String 
    Return DirectCast([Enum].Parse(GetType(EnumName), EnumValue), EnumName).ToString 
End Function 
+5

Tại sao không chỉ sử dụng 'EnumVariable.ToString'? – ppetrov

+0

Bạn có yêu cầu cụ thể về tài sản DateTime.DayOfWeek hoặc nói chung về bất kỳ enum? – dbasnett

+0

@ dbasnett là về bất kỳ enum – ElektroStudios

Trả lời

24

Được tặng enum

public enum Week 
{ 
    Monday, 
    Tuesday, 
    Wednesday, 
    Thursday, 
    Friday, 
    Saturday, 
    Sunday 
} 

đây là những điều bạn có thể làm:

static void Main(string[] args) 
{ 

    // enum to int 
    int i=(int)Week.Thursday; 

    // int to enum; 
    Week day=(Week)3; 

    // enum to string 
    string name=Week.Thursday.ToString(); 
    string fun=Enum.GetName(typeof(Week), 6); 
    string agh=Enum.GetName(typeof(Week), Week.Monday); 
    string wed=EnumName(Week.Wednesday); 

    // string to enum 
    Week apt=(Week)Enum.Parse(typeof(Week), "Thursday"); 

    // all values of an enum type 
    Week[] days=(Week[])Enum.GetValues(typeof(Week)); 

    // all names of an enum type 
    string[] names=Enum.GetNames(typeof(Week)); 

} 

static string EnumName<T>(T value) 
{ 
    return Enum.GetName(typeof(T), value); 
} 
+1

Giảm khi bài viết này giải thích các ưu và nhược điểm cho .ToString() và .GetName(): http://blog.reneorban.com/2012/01/how-to-get-string-name-of-enum-and-why.html – SvendK

7

Trong C#, đó sẽ là:

return Enum.ToObject(typeof(T), EnumValue).ToString(); 

hoặc (kém):

return ((T)(object)(EnumValue)).ToString(); 
+0

Thankyou rất nhiều, tại sao bạn đã xóa ví dụ mở rộng? ví dụ đó đã lưu tôi: P – ElektroStudios

+0

Không cần truyền giá trị cho 'đối tượng' và' T'. Chỉ cần gọi '.ToString()' – ja72

+0

@ ja72 no, 'EnumValue' được gõ là' int' - mà sẽ cho bạn '0 0 '' –

4
public enum WeekDay 
{ 
    Monday = 1, 
    Tuesday = 2, 
    Wednesday = 3, 
    Thursday = 4, 
    Friday = 5, 
    Saturday = 6, 
    Sunday = 7 
} 

string s = WeekDay.Friday.ToString(); 

đơn giản như vậy ... trừ khi tôi đang hiểu lầm gì đó?

Và nếu bạn chỉ có số lượng:

string s = ((WeekDay)4).ToString(); 

CẬP NHẬT

OK, thời gian tiếp theo bạn nên đề cập rằng bạn muốn một cái gì đó chung chung .. để sử dụng cho tất cả các sự đếm và không chỉ là cụ thể thí dụ. Bạn có thể thử này:

public static class EnumExtensions 
{ 
    public static T ToEnum<T>(this int value) where T : struct 
    { 
     return (T)(object)value; 
    } 

    public static string ToEnumName<T>(this int value) where T : struct 
    { 
     return ((T)(object)value).ToString(); 
    } 
} 

Sử dụng như thế này:

int someEnumValue = 4; 
string name = someEnumValue.ToEnumName<WeekDay>(); 

hay:

WeekDay weekDay = someEnumValue.ToEnum<WeekDay>(); 

tôi vẫn không nghĩ rằng đó là thực sự cần thiết tuy nhiên, vì bạn vẫn cần phải biết loại enum anyway ... do đó:

Điều này: string name = ((WeekDay)someEnumValue).ToString();

và điều này string name = someEnumValue.ToEnumName<WeekDay>();

tương đương ... nhưng .. bất kỳ điều gì phù hợp với bạn.

+0

Thật dễ dàng như bạn đã nói nhưng vấn đề của tôi là về cách phân tích một tên enum như một đối số cho một hàm sẽ trả về chuỗi đó! cảm ơn – ElektroStudios

+0

@ElektroHacker, hãy xem cập nhật của tôi. Tôi có một sự hiểu biết tốt hơn bây giờ mà tôi nhận ra bạn muốn một cái gì đó để làm việc với ALL enums. Chúc vui vẻ. – Matt

Các vấn đề liên quan