我有一个包含超过150个字段的类。我需要将字段名称(而不是值)放到一个数组中。
因为手动在代码中编写150个字段名称(根据需求的更改可能会增加或减少)非常困难且不是一种好的方法。
我需要帮助来循环获取字段名称或获取字段名称列表并将其放入数组中,以便我可以遍历它并在代码中使用它。 我正在使用Visual Studio 2008
谢谢
对于所有的公共和非公共实例字段:
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; });
试试这个:
var t = typeof(YourTypeHere);
List<string> fieldNames = new List<string>(t.GetFields().Select(x => x.Name));
尝试
public static string[] GetFieldNames(Type t)
{
FieldInfo[] fieldInfos = t.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
return fieldInfos.Select(x => x.Name).ToArray();
}
对我来说起作用了
var t = typeof(YOURTYPE);
var allfieldNames = new List<string>(t.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).Select(x => x.Name));
// t代表类型
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));