カスタム オブジェクトの各プロパティを確認するにはどうすればよいですか? コレクションオブジェクトではありませんが、非コレクションオブジェクトでこのようなものはありますか?
For Each entry as String in myObject
' Do stuff here...
Next
私のオブジェクトには、文字列、整数、およびブール値のプロパティがあります。
カスタム オブジェクトの各プロパティを確認するにはどうすればよいですか? コレクションオブジェクトではありませんが、非コレクションオブジェクトでこのようなものはありますか?
For Each entry as String in myObject
' Do stuff here...
Next
私のオブジェクトには、文字列、整数、およびブール値のプロパティがあります。
リフレクションを使用すると、それを行うことができます。C# では次のようになります。
PropertyInfo[] propertyInfo = myobject.GetType().GetProperties();
VB.Net の翻訳を追加しました:
Dim info() As PropertyInfo = myobject.GetType().GetProperties()
System.Reflection名前空間を使用して、オブジェクトの種類に関する情報を照会できます。
For Each p As System.Reflection.PropertyInfo In obj.GetType().GetProperties()
If p.CanRead Then
Console.WriteLine("{0}: {1}", p.Name, p.GetValue(obj, Nothing))
End If
Next
コードでコレクションの代わりにこのアプローチを使用することはお勧めできません。リフレクションはパフォーマンスを集中的に使用するものであり、賢明に使用する必要があります。
System.Reflection は「重い」です。私は常に最初に軽いメソッドを実装します..
//C#
if (item is IEnumerable) {
foreach (object o in item as IEnumerable) {
//do function
}
} else {
foreach (System.Reflection.PropertyInfo p in obj.GetType().GetProperties()) {
if (p.CanRead) {
Console.WriteLine("{0}: {1}", p.Name, p.GetValue(obj, null)); //possible function
}
}
}
'VB.Net
If TypeOf item Is IEnumerable Then
For Each o As Object In TryCast(item, IEnumerable)
'Do Function
Next
Else
For Each p As System.Reflection.PropertyInfo In obj.GetType().GetProperties()
If p.CanRead Then
Console.WriteLine("{0}: {1}", p.Name, p.GetValue(obj, Nothing)) 'possible function
End If
Next
End If
リフレクションを使用できます... リフレクションを使用すると、クラス (タイプ)、プロパティ、メソッド、コンストラクター、フィールドなどのすべてのメンバーを調べることができます。
using System.Reflection;
Type type = job.GetType();
foreach ( MemberInfo memInfo in type.GetMembers() )
if (memInfo is PropertyInfo)
{
// Do Something
}