@ ken2kが提案したリフレクションの代わりに、オブジェクトを処理し、必要に応じてキャッシュからデータをマージするクラスのグループを作成できます。必要なそのようなクラスの数を最小限に抑えるために、データ オブジェクトが実装するインターフェイスで動作するようにします。
public interface IDataModelExample
{
string Name { get; set; }
string Value { get; set; }
string Extension { get; set; }
}
public class DataModelExampleMerger
{
public IDataModelExample Merge(IDataModelExample dme)
{
var cachedDme = LoadFromCache(); // This would require the key of course.
// I'll leave the implementation up to
// you.
if (string.IsNullOrEmpty(dme.Name))
{
dme.Name = cachedDme.Name;
}
// Repeat similar if-block for all properties.
return dme;
}
}
データ オブジェクト インターフェイスごとに 1 つの合併クラスを作成する必要があるため、このソリューションはリフレクション ベースのソリューションよりもかなり多くのコードを必要とします。あなたは仕事を回避できないと思います。これはトレードオフです。ランタイム パフォーマンスと全体的なコーディング時間です。正直なところ、ユーザーが文句を言い始めない限り、実行時のパフォーマンス ヒットを受け入れますが、それはあなた次第です。
時期尚早の最適化は諸悪の根源であることを忘れないでください。