0

データレイヤーには、すべてのエンティティを含むL2Sqlアセンブリがあります。これらのエンティティは、主に相互に関連しています。問題は、内部開発標準のため、オブジェクトインスタンスが作成されたら、特定のプロパティを特定の値に設定したいということです。

私の考えは、関連するオブジェクト(Person.ContactDetails.Address)を再帰的にスキャンし、プロパティ値を設定してから、さらに処理するために親オブジェクト(Person)を返すことです。

再帰を実行していますが、残念ながら、Personではなくheirachy(アドレス)の最後の子のみが返されるようです。

これが私のコードです:

private Type SetDefaultTypeValues(Type t, object o, Type parentType)
{
    Type theType = t;
    PropertyInfo[] fields = theType.GetProperties();

    foreach (PropertyInfo fi in fields)
    {
        switch (fi.Name)
        {
            case "CreateDate":
                fi.SetValue(o, DateTime.Now, null);
                break;
            case "ModifyDate":
                fi.SetValue(o, DateTime.Now, null);
                break;
            case "Active":
                fi.SetValue(o, true, null);
                break;
            default:
                if (fi.PropertyType == typeof(DateTime))
                {
                    fi.SetValue(o, new DateTime(1900, 01, 01, 12, 0, 0), null);
                }
                break;
        }

        if (fi.PropertyType.FullName.StartsWith("whatever.arme.Domain.Entities") && fi.PropertyType != parentType) // This is to ignore properties of the child which contain Parent references
        {
            var obj = fi.GetValue(o, null);
            if (obj == null)
                obj = Assembly.GetAssembly(theType).CreateInstance(fi.PropertyType.FullName);
            theType = SetDefaultTypeValues(fi.PropertyType, obj, theType); // I imagine the problem lies between here...
        }
    }
    return theType; // ... and here?
}

親オブジェクトが元の呼び出し元に戻らず、代わりに別のタイプのオブジェクトを返すのはなぜですか?

4

1 に答える 1

0

プロパティに対して呼び出すときの戻り値で上書きするため、tの代わりに戻る必要があります。theTypetheTypeSetDefaultTypeValues

于 2013-02-13T09:33:29.657 に答える