2010-09-10 24 views
21

Tôi đã có một lớp có chứa hơn 150 trường. tôi cần tên của các trường (không phải là giá trị) trong một mảng.Cách lặp lại tên trường của một lớp

vì cách tiếp cận rất khó và không tốt để viết 150 tên trường (có thể tăng hoặc giảm theo số lần thay đổi yêu cầu) theo cách thủ công trong mã.

tôi cần trợ giúp để có được vòng lặp thông qua tên cho trường hoặc nhận danh sách tên trường trong một mảng để tôi có thể lặp qua nó và sử dụng nó trong mã. tôi đang sử dụng visual studio 2008

Cảm ơn

Trả lời

18

cho tất cả các instance fields không công bố công +:

var fields = typeof(YourType).GetFields(
    BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); 
var names = Array.ConvertAll(fields, field => field.Name); 

hoặc trong VS2005 (bình luận):

FieldInfo[] fields = typeof(YourType).GetFields(
    BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); 
string[] names = Array.ConvertAll<FieldInfo, string>(fields, 
    delegate(FieldInfo field) { return field.Name; }); 
+0

hi marc. giải pháp thực sự tốt của nó. bạn có thể cho tôi biết điều đó không là nó giống nhau cho studio trực quan 2005 hoặc sẽ có các phần khác? –

+0

actaully tôi đã có một ứng dụng tương tự với phiên bản trước đó trong vs2005 –

+0

Có một sự khác biệt nhỏ. Bạn không thể sử dụng ConvertAll trong năm 2005, vì vậy bạn nên sử dụng foreach thay thế. Và cũng sử dụng loại bê tông thay vì var. – StuffHappens

3

thử

public static string[] GetFieldNames(Type t) 
    { 
     FieldInfo[] fieldInfos = t.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); 
     return fieldInfos.Select(x => x.Name).ToArray(); 
    } 
9

Hãy thử điều này:

var t = typeof(YourTypeHere); 
List<string> fieldNames = new List<string>(t.GetFields().Select(x => x.Name)); 
1

Công việc này đối với tôi hoàn toàn ExampleClass là lớp Bạn cần liệt kê tất cả các lĩnh vực

public void GetClassFields(Type t) 
{ 
    List<string> fieldNames = new List<string>(t.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).Select(x => x.Name)); 
    foreach (string name in fieldNames) 
    { 
     Console.WriteLine(name); 
    }  
} 
//Usage 
GetClassFields(typeof(ExampleClass)); 
1

Làm việc đối với tôi

var t = typeof(YOURTYPE); 

var allfieldNames = new List<string>(t.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).Select(x => x.Name)); 

// t cho Loại

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