0

同じタイプの別のオブジェクトにまだ入力されていないオブジェクトから、入力された値のみをコピーする必要があります。

たとえば、オブジェクトが渡され、それはデータで部分的にインスタンス化されているだけで、データベースを読み取ってオブジェクトの完全にインスタンス化されたバージョンを取得しますが、これにはまだデータベースにコミットされたアプリケーションによる変更がない可能性があります。したがって、移動する必要があります。データベース バージョンからオブジェクトの渡されたバージョンへの任意の値 – 渡されたオブジェクトに既に存在する可能性のある値を上書きすることはありません (これらは最新の値であるため)。

別の投稿で Adam Robinson によって提案された以下のコード (以下を参照してください。非常に便利です - ありがとう!) は良い出発点です。ただし、これを拡張する必要があります。ターゲット オブジェクトにまだ入力されていない値のみをコピーしたいためです (つまり、destProperty が null でないことを確認する必要があります)。ただし、さらに複雑な点として、渡されたオブジェクト内で宣言された内部複合型があります。このコードは、サブグループの個々のプロパティに移動せずに、高レベルのサブグループをコピーします (つまり、ルート cdt で宣言された変数を試すことができます) null をチェックしますが、サブ cdts のすべてのフィールドは、個々のフィールドを通過せずに単純にコピーされます)。

どんな助けでも大歓迎です。

public static void CopyPropertyValues(object source, object destination)
{
    var destProperties = destination.GetType().GetProperties();

foreach (var sourceProperty in source.GetType().GetProperties())
{
    foreach (var destProperty in destProperties)
    {
        if (destProperty.Name == sourceProperty.Name && 
    destProperty.PropertyType.IsAssignableFrom(sourceProperty.PropertyType))
        {
            destProperty.SetValue(destination, sourceProperty.GetValue(
                source, new object[] { }), new object[] { });

            break;
        }
    }
}

}

4

1 に答える 1