2010-09-10 23 views
21

我有一个包含多于150个字段的类。我需要数组中的字段名称(不是值)。如何在一个类的字段名称上循环

因为它非常难以编写150个字段名称(可根据需求更改计数递增或递减),而不是一种很好的方法。

我需要帮助来获得通过字段的名称循环或获得数组中的字段名称列表,以便我可以循环它并在代码中使用它。 我使用Visual Studio 2008的

感谢

回答

18

所有公共+非公共实例字段:

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

或VS2005(评论):

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

喜马克。它非常好的解决方案。你能告诉我那个吗?对于visual studio 2005来说是一样的还是会有其他的syntex? – 2010-09-10 10:59:28

+0

actaully我有vs2005中的以前版本的相同的应用程序 – 2010-09-10 11:00:33

+0

有一个小的差异。你不能在vs 2005中使用ConvertAll,所以你应该使用foreach代替。并且使用具体类型而不是var。 – StuffHappens 2010-09-10 11:10:49

3

尝试

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

试试这个:

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

这对我的工作非常ExampleClass中是一流的,您需要列出所有领域

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

为我工作

var t = typeof(YOURTYPE); 

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

//吨类型

相关问题