私は2つのオブジェクトを持っていると私はそれらをマージする:作成するにはC#を使用して実行時に2つのオブジェクトをマージする最適な方法は何ですか?
public class Foo
{
public string Name { get; set; }
}
public class Bar
{
public Guid Id { get; set; }
public string Property1 { get; set; }
public string Property2 { get; set; }
public string Property3 { get; set; }
public string Property4 { get; set; }
}
:
public class FooBar
{
public string Name { get; set; }
public Guid Id { get; set; }
public string Property1 { get; set; }
public string Property2 { get; set; }
public string Property3 { get; set; }
public string Property4 { get; set; }
}
私は、実行時にのみはFooの構造を知ることができます。バーは実行時に任意のタイプにすることができます。タイプを与えられ、そのタイプをFooと組み合わせるメソッドを持っていたいと思います。たとえば、上記のシナリオでは、実行時にメソッドにBar型が与えられ、Fooと組み合わせました。
これを行うにはどうすればよいでしょうか?それはLINQ式を使用して行うことができますか、それを動的に生成する必要がありますか、別の方法がありますか?私はまだC#3.0で新しいLINQ名前空間を学んでいるので、LINQ式を使用して実行できない場合は無知を言い訳します。これはC#でこのような動的なことをしなければならなかったのは初めてのことなので、私が利用できるすべてのオプションについてはあまりよく分かりません。
ありがとうございました。
EDIT
これは、直列化のために私に与えられた型にメタ情報を付加するために厳密です。このシナリオでは、シリアライズされる前に、追加する必要のあるメタ情報をユーザーのオブジェクトに無関係に保持します。私はこの質問をする前に2つの選択肢を考え出しており、使用するものを決める前に、もう何があったかを見たいと思っていました。
私が出ている2つのオプションがあります。メタ情報を付加することで、それをシリアル化した後、私に与えられたタイプのシリアル化された文字列を操作
。
私に与えられたタイプをラップします。これは、@ Zxproと同じですが、私のものはわずかに異なりますが、これは問題ありません。それはちょうど、誰もが設定より規約についてですので、私のAPIのユーザーは、悪いことではありません慣例を、従わなければならないでしょう。
public class Foo<T>
{
public string Name { get; set; }
public T Content { get; set; }
}
EDIT
おかげで皆を彼らの答えは私は上記のようにオブジェクトをラップすることに決めました。そして大多数がこのアプローチを好んだので、@ Zxproに答えを出しました。
他の誰かがこの質問に遭遇した場合は、より良い方法があると思われる場合は投稿してください。
これは理想的な解決策ですが、Barのコンパイル時の知識が必要です。元のAskerは実行時にしか利用できないと述べています。 – Randolpho
@Randalpho:たぶん、そうではないかもしれない。この文脈では* *知られていないかもしれませんが、アーキテクチャに応じてジェネリックを使用することも可能でしょう。 –
私はそれについて考えてきました。これが簡単で効果的なことができなければ、それは私の秋の計画です。私のところは少し違いました。基本的にpublic Fooを作成する {public string Name {get;セット; }パブリックTコンテンツ{get;セット; }} –