2

という名前のテーブルがVariablesあり(Id ,AdId,Variable1,Variable2,Variable3,Variable4,Variable5,Variable6,Variable7,Variable8 )List<string> aいくつかの文字列 (おそらく 1、3、6、または 8) を含む があります。

私の質問は、これらの文字列を List の Variables テーブルに挿入する方法です。

そんなことができる

    Variables v=new Variables();
    v.AdId=2;

if(a.count()==1){

v.variable1=a[0];
}else if(a.count()==2){
v.variable1=a[0];
v.variable2=a[1]
}else if (//so on){}

しかし

私は次のようにもっと動的に何かをしたい:

Variables v=new Variables();
    v.AdId=2;
    for(int i=0; i<a.count() ;i++)
    {
         //here list items to be inserted to (variable1,variable2.....variable8)
         //, depending on list size ,number of variables are inserted
    }
4

4 に答える 4

4

Reflectionを使用すると、 GetPropertyメソッドを使用して変数モデルのプロパティに動的にアクセスできます。

        Variables v = new Variables();
        var a = new List<int>{ 1, 2, 3, 4, 5, 6 , 7};
        for (int i = 0; i < a.Count; i++)
        {
            String propertyName = "Variable" + i;
            Type myType = v.GetType();
            try
            {
                myType.GetProperty(propertyName).SetValue(v, a[i].ToString());
            }
            catch (NullReferenceException nre)
            {
                Console.WriteLine("Cannot Find Property");
            }
        }

ご覧のとおり、文字列を使用してオブジェクトのプロパティにアクセスするpropertyNameので、変更したいプロパティにアクセスするような方法でその文字列を操作できます。

アクセスしようとしているプロパティがクラス/モデルで定義されていない場合は、最後に try と catch ブロックを使用しました。

また、リフレクションは遅いソリューションになる可能性があることに注意してください。ただし、パフォーマンスを大幅に改善する方法を探すことができます。

ありがとう。それが役立つことを願っています。

于 2013-08-14T10:41:56.397 に答える
1

Variables クラスのインデクサーを作成できます。ただし、内部実装では、値をプロパティに設定するためにスイッチまたはリフレクションを使用する必要があります。

于 2013-08-14T11:21:11.903 に答える