2009-04-09 16 views
2

データプレイヤーをループして特定のタイプのオブジェクトのロードを作成しますが、オブジェクト名としてdatareaderの値を使用したいとします。文字列からオブジェクト名を作成する

String "string_" + <value from datareader> = new String(); 

私は値TEMP1、DataReaderオブジェクトから出てくるTEMP2 & TEMP3を持っていたのであれば、私は、例えば文字列型の3つの新しいオブジェクトを持っているでしょう

string_temp1 
string_temp2 
string_temp3 

データレディーヤーの名前でオブジェクトを作成するにはどうすればよいですか?これを行うにはどうすればよいでしょうか?

+0

私もこれを行う必要があります。実行時に定義された変数名を持つオブジェクト型(文字列ではない)が必要です。これは、レガシーWebサービスのDataContractSerializerを満たすために必要です。要素名も識別子です。私は以下の答えのいずれかがOP問題を満足するとは思わない。 – barrypicker

答えて

11

よりもむしろ反射を利用して、私はそれだけで使用すると、オブジェクトがその値に持つようにしたい名前をマップDictionaryを使用する方が簡単だろうと思う:

var map = new Dictionary<String, String>(); 
map[...] = new String(); 
// ^
// | 
// +---- substitute with whatever naming scheme you deem suitable 
+0

これは確かにこの問題に対する良いアプローチです。 – Statement

+0

無駄な 'string_'接頭辞を削除します。 –

+0

これは間違いなく行く方法です。 :) – ibz

2

これを行うにはほとんど価値があるでしょう。値から変数NAMEを作成すると、コードがコンパイル時にコンパイルされ、実行時に変数名を設定しようとしているため、この変数を参照する方法はありません。

コンパイラがILに、そして最終的にはJITに正しくマップできることを覚えておいてください。これは、難読化が機能する理由です。ほとんどの難読化ツールが行う主要な事柄の1つは、すべての変数名を非常に短い無意味な名前にスクランブルすることです。これは実行時の動作には何の影響もありません。コンパイル後は名前は無意味です。

私はJohn Feminellaのアプローチ、またはそれに類するものをおすすめします。

関連する問題