0

実行時にsqldatareaderのフィールド名を動的オブジェクトに動的に割り当てるにはどうすればよいですか?

SqlDataReaderのフィールド名を変数に読み込んだとしましょう。

string sqlDataReaderFieldNameStringVariable  = reader.GetName(index);

私は言えない:

dynamic dyn = new ExpandoObject();
dyn.sqlDataReaderFieldNameStringVariable = "test";

どうやってやるの?

アップデート:

まだポイントを取得する時間です;-)メソッドの戻り値であるExpandoObject型のリストにdynオブジェクトを追加します。data [0]を介してリストにアクセスすると、コンパイル時にtestプロパティが存在しません???

リストを返すメソッドの外でこれを行うと、次のようになります。

dynamic bla = (ExpandoObject)data[0];
            String shit = bla.Name;

なぜキャストしなければならないのですか?回避策はありますか?ジョンありがとう。

4

2 に答える 2

2

そのためには、最初に to をキャストする必要がありExpandoObject dynます。IDictionary<string, object>

dynamic dyn = new ExpandoObject();
var dynDict = dyn as IDictionary<string, object>;
dynDict[sqlDataReaderFieldNameStringVariable] = "test";   
于 2012-02-24T21:11:31.713 に答える
1

ほとんどの動的オブジェクトでは、注意が必要です。( を使用してIDynamicMetaObjectProvider)実行可能ですが、注意が必要です。を実際に使用している場合は、次ExpandoObjectのように実装されているため簡単ですIDictionary<string, object>

dynamic dyn = new ExpandoObject();
var dictionaryView = (IDictionary<string, object>) dyn;
dictionaryView[sqlDataReaderFieldNameStringVariable] = "test";
于 2012-02-24T21:11:47.123 に答える