C#プログラムで実行時にオブジェクトの値を取得しようとすると、「オブジェクトがターゲットタイプと一致しません」というメッセージが表示されます。 、姓と名(簡略化のため、すべての文字列) -PropertyInfo再帰中のGetValueスローエラー
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のオブジェクトを渡します。
- 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;
}
:
具体的にここに:
それはのようなものになるはずですか? –
コードを追加しました。 –