linq を使用してオブジェクト/クラスのプロパティのリストを取得するにはどうすればよいですか??
public class Person {
public string Name { get; set; }
public string Age { get; set; }
public string Gender { get; set; }
}
{"名前","年齢","性別"}にしたい。
linq を使用してオブジェクト/クラスのプロパティのリストを取得するにはどうすればよいですか??
public class Person {
public string Name { get; set; }
public string Age { get; set; }
public string Gender { get; set; }
}
{"名前","年齢","性別"}にしたい。
以前のコメンターが述べたように、リフレクションは、この情報を取得するために使用する必要があるツールです。
以下は、架空の「Person」クラスからプロパティ名を取得して表示する小さなサンプル プログラムです。
System.Type type = typeof(Person);
System.Reflection.PropertyInfo[] properties = type.GetProperties();
foreach (System.Reflection.PropertyInfo property in properties)
Console.WriteLine(property.Name);
リフレクションを使用する必要があります。これは、私が多くのプロジェクトで使用した機能です。
private List<MemberInfo> GetMembers(Type objectType, MemberTypes memberType)
{
List<MemberInfo> members = new List<MemberInfo>();
Assembly asm = Assembly.GetAssembly(objectType);
foreach (Type t in asm.GetExportedTypes().Where((Type testType) => object.ReferenceEquals(testType, objectType))) {
foreach (MemberInfo mi in t.GetMembers().Where((MemberInfo member) => member.MemberType == memberType)) {
switch (memberType) {
case MemberTypes.Property:
members.Add(mi);
break;
case MemberTypes.Method:
bool isValid = true;
foreach (PropertyInfo pi in t.GetProperties()) {
if ((pi.CanWrite && pi.GetSetMethod().Name == mi.Name) || (pi.CanRead && pi.GetGetMethod().Name == mi.Name)) {
isValid = false;
break;
}
}
if (isValid)
members.Add(mi);
break;
}
}
}
return members.OrderBy((MemberInfo mi) => mi.Name).ToList();
}
それを呼び出すには、たとえば次のように使用できます。
var properties = GetMembers(typeof(myObject), MemberTypes.Property)
typeof(Person).GetProperty("Name")
Reflection を使用して個々のプロパティを取得できます。詳細については、こちらをお読みください。