0

以前、このフォーラムに質問を投稿しました - 「内部型を一般的な名前と値のペアのリストに変換するには」。リフレクションを使用する方向性を示すいくつかの素晴らしい回答を受け取りました。概念の簡単な証明を行ったところ、見栄えが良かったです。ただし、パフォーマンスなどの観点から、リフレクションの使用に関していくつかの質問がありました。これを行う他の方法はあるのでしょうか?

以下の要件の概要を参照してください。

内部型を取得し、フィールドが列挙型またはリストに存在するかどうかを確認し、データが入力されている場合は、それを一般的な名前/値のペア リストに移動します。これは、新しいフィールドが追加された場合にスキーマの変更などを心配することなく、一般的/標準的な方法で多くの情報を送信できるようにするためです。私の問題は、一般的な構造を設定する方法です。

[Serializable]
public class Location
    {   
          public string sAddress { get; set; }
          public string sCity { get; set; }
          public int iZipCode { get; set; }
    }

次のように変換する必要があります。

<AttributeList>
  <Attribute>
    <Name>sAddress</Name>
    <Value>123 ABC Street</Value>
    <DataType>string</DataType>
  </Attribute>
</AttributeList>

sCity と iZipCode について繰り返します。(リフレクションを使用せずに)考えることができる唯一の方法は、内部構造の各フィールドを手動でコーディングすることです-ビットは私には非常に効果がないようです

どんなアイデアでも大歓迎です!!

4

1 に答える 1

3

リフレクションはひどく非効率的である必要はありません。基本的に同じコードを何度も実行することがわかっている場合は、リフレクションベースのメンバーからデリゲートを作成できます。それらははるかに速く実行されます。さまざまなオプションについては、を参照してくださいDelegate.CreateDelegate(プロパティは基本的にget / setメソッドのペアにすぎないことに注意してください)。

.NET 3.5を使用している場合は、デリゲートを構築するためのわずかな代替アプローチとして式ツリーを使用できます。

デリゲートベースのフォームを入手したら、パフォーマンスはかなり合理的なはずです。

于 2013-02-28T09:17:31.163 に答える