2011-11-14 33 views
9

Có cách nào sạch hơn để lấy giá trị char của một enum trong C#.Cách tốt hơn để lấy Char Enum

public enum DivisionStatus 
     { 
      None = 'N', 
      Active = 'A', 
      Inactive = 'I', 
      Waitlist = 'W' 
     } 

string status = Enums.DivisionStatus.Active.ToString()[0].ToString(); // "A" 
+0

OmG ... Tốt mà bạn đã hỏi ở đây. – nawfal

Trả lời

24

Chỉ cần đúc giá trị:

char status = (char)Enums.DivisionStatus.Active; 

Lưu ý rằng điều này sẽ sử dụng các giá trị thay vì nhận dạng. Giá trị Enums.DivisionStatus.Active là mã ký tự của 'A', vì đó là giá trị mà bạn đã xác định.

Sử dụng giá trị trực tiếp nhanh hơn tìm kiếm số nhận dạng cho giá trị.

+0

Loại cơ bản có thể là bất kỳ loại tích phân nào ngoại trừ char: http://msdn.microsoft.com/en-us/library/sbbt4032(v=vs.80).aspx – phoog

+0

@phoog: Tôi đã xóa nó khỏi câu trả lời. – Guffa

+0

Tôi nghĩ rằng tôi đã không giải thích nó một cách chính xác. Nếu tôi muốn nó có một chuỗi như kết quả kết thúc và không phải là một char. –

0

tôi sẽ chỉ đúc các giá trị enum mà không gọi ToString:

var status = (char)DivisionStatus.Active; 

Hoặc có thể bạn sẽ cần phải làm

var status = (char)(int)DivisionStatus.Active; 
1

var status = (char)Enums.DivisionStatus.Active; nên làm chính xác những gì bạn muốn. Cách bạn đã làm trước khi không làm việc nếu ký tự đầu tiên của văn bản enum không khớp với giá trị char cơ bản.

Điều này cũng hoạt động đối với các loại vi khuẩn có int như một kiểu sao lưu.

+0

Enum không có một int như là một loại ủng hộ (vì nó là mặc định). Các giá trị char được sử dụng trong định nghĩa được chuyển đổi hoàn toàn thành giá trị int. – Guffa

0

công trình đúc đơn giản, tôi đã thử nó:

using System; 

public enum DivisionStatus 
{ 
    None = 'N', 
    Active = 'X', 
    Inactive = 'I', 
    Waitlist = 'W' 
} 

class Program 
{ 
    public static void Main() 
    { 
    var ds = DivisionStatus.Active; 
    Console.WriteLine((char)ds); 
    } 
} 
2

tôi xây dựng một "pseudo-enum" mà giải quyết vấn đề. Trong trường hợp của bạn nó có thể trông giống như:

public class DivisionStatus 
{ 
    public static readonly DivisionStatus None = new DivisionStatus('N'); 
    public static readonly DivisionStatus Active = new DivisionStatus('A'); 
    public static readonly DivisionStatus Inactive = new DivisionStatus('I'); 
    public static readonly DivisionStatus Waitlist = new DivisionStatus('W'); 

    internal char Value { get; private set; } 

    public override string ToString() 
    { 
     return Value.ToString(); 
    } 

    protected DivisionStatus(char value) 
    { 
     this.Value = value; 
    } 
} 

Bạn có thể sử dụng nó như một enum mà trả về giá trị enum char trên ToString(), không bó bột:

Console.WriteLine(DivisionStatus.None); // returns 'N' 
1

Bạn cũng có thể sử dụng một lớp tĩnh. Mặc dù, nếu bạn luôn sử dụng các giá trị dưới dạng chuỗi, bạn có thể dễ dàng thay đổi từng thuộc tính thành chuỗi. Một ưu điểm của phương thức này là bạn có thể thêm các mô tả cho mỗi mục sẽ hiển thị trong InteliSense.

public static class DivisionStatus 
{ 
    /// <summary> 
    /// Some information about None 
    /// </summary> 
    public const char None = 'N'; 
    /// <summary> 
    /// Some information about Active, blah blah 
    /// </summary> 
    public const char Active = 'A'; 
    /// <summary> 
    /// Some information about Inactive, blah blah 
    /// </summary> 
    public const char Inactive = 'I'; 
    /// <summary> 
    /// Some information about Waitlist, blah blah 
    /// </summary> 
    public const char Waitlist = 'W'; 
} 
Các vấn đề liên quan