質問

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);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top