我有一个包含超过150个字段的类。我需要数组中的字段名称(而不是值)。
因为在代码中手动编写150个字段名称(可以根据需求变化递增或递减计数)非常困难而且不是很好的方法。
我需要帮助来获取字段名称的循环或获取数组中的字段名称列表,以便我可以循环并在代码中使用它。 我正在使用visual studio 2008
由于
答案 0 :(得分: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; });
答案 1 :(得分:9)
试试这个:
var t = typeof(YourTypeHere);
List<string> fieldNames = new List<string>(t.GetFields().Select(x => x.Name));
答案 2 :(得分:3)
试
public static string[] GetFieldNames(Type t)
{
FieldInfo[] fieldInfos = t.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
return fieldInfos.Select(x => x.Name).ToArray();
}
答案 3 :(得分: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));
答案 4 :(得分:1)
为我工作
var t = typeof(YOURTYPE);
var allfieldNames = new List<string>(t.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).Select(x => x.Name));
// t for Type