2009-01-29 50 views
18

Bạn có thể chuyển C# enum chuẩn làm tham số không?C# enums là tham số chức năng?

Ví dụ:

enum e1 
{ 
    //... 
} 

enum e2 
{ 
    //... 
} 

public void test() 
{ 
    myFunc(e1); 
    myFunc(e2); 
} 

public void myFunc(Enum e) 
{ 
    // Iterate through all the values in e 
} 

Bằng cách này, tôi hy vọng sẽ lấy lại tất cả các tên trong bất kỳ enum nhất định. Mã Iteration sẽ trông như thế nào?

Trả lời

26

Điều này!

 public void Foo(Enum e) 
     { 
      var names = Enum.GetNames(e.GetType()); 

      foreach (var name in names) 
      { 
       // do something! 
      } 
     } 

EDIT: bad của tôi, bạn không nói lặp. Lưu ý: Tôi biết tôi chỉ có thể thực hiện cuộc gọi GetNames() trong báo cáo foreach của mình, nhưng tôi muốn gán kiểu điều đó cho một phương thức gọi trước, vì nó tiện dụng để gỡ lỗi.

+0

Tôi có thể chỉ định kết quả cho một thứ gì đó. :-) – tvanfosson

+0

yeah whups ... xin lỗi, tôi đã vui mừng: D –

3

Sử dụng phương thức Enum.GetNames (typeof (e)), điều này sẽ trả về một chuỗi các chuỗi có tên.

Bạn cũng có thể sử dụng Enum.GetValues ​​để nhận các giá trị đối ứng.

Chỉnh sửa -Whoops - nếu bạn chuyển tham số là Enum, bạn sẽ cần sử dụng e.GetType() thay cho typeof() mà bạn sẽ sử dụng nếu bạn đã chuyển tham số vào làm tên kiểu Enum thực tế.

3

Bạn có ý nghĩa giống như Enum.GetNames?

3

Enum.GetValues ​​ Enum.GetNames

nên cái gì như ...

foreach(e1 value in Enum.GetValues(typeof(e1))) 
2

Như thế này:

public void myFunc(Enum e) 
    { 
     foreach (var name in Enum.GetNames(typeof(e))) 
     { 
      Console.WriteLine(name); 
     } 
    } 
0

đúng là:

public void myFunc(Enum e) 
{ 
    foreach (var name in Enum.GetNames(e.GetTye())) 
    { 
     Console.WriteLine(name); 
    } 
} 
3

Bạn sẽ gặp rắc rối e nếu bạn thử chuyển một số enum trực tiếp đến myFunc, như trong ví dụ sau:

enum e1 {something, other}; 
myFunc(e1); // Syntax error: "e1 is a type, but is being used like a variable" 
+0

Điều đó không giải thích bất cứ điều gì, trên thực tế tôi không có vấn đề đi qua một enum đến một chức năng theo cách bạn mô tả ... – iMortalitySX

+3

'' 'Lỗi: 'e1' là 'loại' nhưng được sử dụng như một 'biến'''' –

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