I have got a class which contains more then 150 fields. i need the name of fields (not value) in an array.
because its very hard and not a good approach to write 150
Try this:
var t = typeof(YourTypeHere);
List<string> fieldNames = new List<string>(t.GetFields().Select(x => x.Name));
This work for me perfectly ExampleClass is class You need list all fields
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));
try
public static string[] GetFieldNames(Type t)
{
FieldInfo[] fieldInfos = t.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
return fieldInfos.Select(x => x.Name).ToArray();
}
for all public + nonpublic instance fields:
var fields = typeof(YourType).GetFields(
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
var names = Array.ConvertAll(fields, field => field.Name);
or in VS2005 (comments):
FieldInfo[] fields = typeof(YourType).GetFields(
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
string[] names = Array.ConvertAll<FieldInfo, string>(fields,
delegate(FieldInfo field) { return field.Name; });
Worked for me
var t = typeof(YOURTYPE);
var allfieldNames = new List<string>(t.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).Select(x => x.Name));
// t for Type