PropertyInfo getValue再帰中のスローエラー
-
28-10-2019 - |
質問
C#プログラムの実行時にオブジェクトの値を取得しようとすると、「オブジェクトはターゲットタイプと一致しません」を取得しています。
public void GetMyProperties(object obj)
{
foreach(PropertyInfo pinfo in obj.GetType().GetProperties())
{
if(!Helper.IsCustomType(pinfo.PropertyType))
{
string s = pinfo.GetValue(obj, null); //throws error during recursion call
propArray.Add(s);
}
else
{
object o = pinfo.PropertyType;
GetMyProperties(o);
}
}
}
クラスBrokerInfoのオブジェクトを渡します。このオブジェクトには、Inturnがプロパティ(FirstNameとLastName(すべての文字列のためのすべての文字列)があるタイプブローカーのプロパティが1つあります。
- BrokerInfo
- Broker
- FirstName
- LastName
私はカスタムタイプを再帰的にチェックし、それらの価値を得ようとしています。私は次のようなことをすることができます:
- Broker
- FirstName
- LastName
助けてください。
更新:Leppieの助けを借りて解決することができました。ここに修正コードがあります。
public void GetMyProperties(object obj)
{
foreach(PropertyInfo pinfo in obj.GetType().GetProperties())
{
if(!Helper.IsCustomType(pinfo.PropertyType))
{
string s = pinfo.GetValue(obj, null);
propArray.Add(s);
}
else
{
object o = pinfo.GetValue(obj, null);
GetMyProperties(o);
}
}
}
IsCustomは、タイプがカスタムタイプかどうかを確認する私の方法です。これがコードです:
public static bool IsCustomType(Type type)
{
//Check for premitive, enum and string
if (!type.IsPrimitive && !type.IsEnum && type != typeof(string))
{
return true;
}
return false;
}
解決
インスタンスの代わりに、なぜタイプに穴を開けているのですか?
具体的には:
object o = pinfo.PropertyType;
GetMyProperties(o);
それは次のように見えるはずです:
var o = pinfo.GetValue(obj, null);
GetMyProperties(o);
所属していません StackOverflow