2009-08-20 31 views
7

thể trùng lặp:
Type.GetFields() - only returning “public const” fieldsPhản ánh liên tục tính/trường trong .net

Tôi đã một lớp mà trông giống như như sau:

public class MyConstants 
{ 
    public const int ONE = 1; 
    public const int TWO = 2; 

    Type thisObject; 
    public MyConstants() 
    { 
     thisObject = this.GetType(); 
    } 

    public void EnumerateConstants() 
    { 
     PropertyInfo[] thisObjectProperties = thisObject.GetProperties(BindingFlags.Public); 
     foreach (PropertyInfo info in thisObjectProperties) 
     { 
      //need code to find out of the property is a constant 
     } 
    } 
} 

Bascially nó đang cố gắng để phản ánh chinh no. Tôi biết cách phản ánh các trường ONE, & HAI. Nhưng làm thế nào để tôi biết nếu nó là một hằng số hay không?

+4

Hiệu quả dupe của http://stackoverflow.com/questions/1287797 –

+0

Tôi lấy lại ... Tôi không thể tìm thấy các trường MỘT & HAI. – deostroll

+0

Chúng không chỉ là các trường, chúng là các trường tĩnh, không phải các trường mẫu. –

Trả lời

16

Đó là vì chúng là các trường chứ không phải thuộc tính. Hãy thử:

public void EnumerateConstants() {   
     FieldInfo[] thisObjectProperties = thisObject.GetFields(); 
     foreach (FieldInfo info in thisObjectProperties) { 
      if (info.IsLiteral) { 
       //Constant 
      } 
     }  
    } 

Chỉnh sửa: right DataDink của, nó mượt mà sử dụng IsLiteral

+0

uh vâng nhận ra nó quá muộn ... Yeah là bất cứ điều gì const cơ bản tĩnh quá? – deostroll

+0

Câu trả lời của DataDink thực sự là một chút mượt mà hơn. Và vâng; hãy thử thêm && info.IsStatic. –

+0

wht là sự khác biệt giữa IsLiteral & IsStatic nếu cả hai đều đúng? – deostroll

5

FieldInfo các đối tượng thực sự có một tấn "IsSomething" boolean phải vào chúng:

var m = new object(); 
foreach (var f in m.GetType().GetFields()) 
if (f.IsLiteral) 
{ 
    // stuff 
} 

nào giúp bạn tiết kiệm một tí hon mã số trên kiểm tra các thuộc tính anyways.

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