5

オブジェクトのネストされたセットがあります。つまり、一部のプロパティはカスタム オブジェクトです。プロパティ名の文字列を使用して階層グループ内のオブジェクト プロパティ値を取得し、階層をスキャンして名前が一致するプロパティを見つけ、その値を取得する何らかの形式の「検索」メソッドを取得したいと考えています。

これは可能ですか?

どうもありがとう。

編集

クラス定義は疑似コードである場合があります。

Class Car
    Public Window myWindow()
    Public Door myDoor()
Class Window
    Public Shape()
Class Door
    Public Material()

Car myCar = new Car()
myCar.myWindow.Shape ="Round"
myDoor.Material = "Metal"

少し不自然ですが、トップオブジェクトから始めて、何らかの形式の検索関数でマジックストリング「Shape」を使用して、「Shape」プロパティの値を「見つける」ことができますか。すなわち:

string myResult = myCar.FindPropertyValue("Shape")

うまくいけば、myResult = "Round" です。

これが私が求めているものです。

ありがとう。

4

2 に答える 2

9

Based on classes you showed in your question, you would need a recursive call to iterate your object properties. How about something you can reuse:

object GetValueFromClassProperty(string propname, object instance)
{
    var type = instance.GetType();
    foreach (var property in type.GetProperties())
    {
        var value = property.GetValue(instance, null);
        if (property.PropertyType.FullName != "System.String"
            && !property.PropertyType.IsPrimitive)
        {
            return GetValueFromClassProperty(propname, value);
        }
        else if (property.Name == propname)
        {
            return value;
        }
    }

    // if you reach this point then the property does not exists
    return null;
}

propname is the property you are searching for. You can use is like this:

var val = GetValueFromClassProperty("Shape", myCar );
于 2013-04-16T02:29:59.930 に答える