0

変数を識別子として使用しようとしています (間違っているかもしれません)。例で説明してみましょう (SQL コードのほとんどを省略しました)。

class values
{
    List<string> list = new List<string>()
    {
        "value1",
        "value2",
        "value3"
    };
    string value1 = "one";
    string value2 = "two";
    string value3 = "three";
}

private void method()
{
    foreach(string element in list)
    {
        sqlCommand.Parameters.Add(new SqlParameter("@"+element, SqlDbType.VarChar));
        sqlCommand.Parameters["@"+element].Value = values.element;
    }
}

そのため、パラメーターと値のリストを含むクラスを作成し、それらのパラメーターをコマンドに追加してクラスから値を割り当てるすべてのオブジェクトをループします。クラスから呼び出すオブジェクトをプログラムに伝えるために変数「要素」を使用してクラスから値を呼び出そうとすると、問題が発生します

4

2 に答える 2

4

Dictionaryこのように使用する場合は、おそらく値を として保存する必要があります。

class values
{
    IDictionary<string, string> list = new Dictionary<string, string>()
    {
        { "value1", "one" },
        { "value2", "two" },
        { "value3", "three" },
    };

    private void method()
    {
        foreach(var pair in list)
        {
            sqlCommand.Parameters.AddWithValue("@"+pair.Key, pair.Value);
        }
    }
}
于 2013-11-07T21:01:44.413 に答える
0

代わりに適切なコレクションを使用してください。「動的な」変数名はリフレクションによってのみ実現でき、ほとんどの場合、1 回限りのものは避ける必要があります。

通常のフィールド/プロパティを使用し、必要に応じてラップすることができます。これは、強力な静的型がまだ公開されており、値を外部から指定できるため便利です。例えば:

class values

  List<KeyValuePair<string,string>> Values {
    get {
      return new List<KeyValuePair<string,string>>() {
        {"value1", value1},
        {"value2", value2},
        {"value3", value3},
      };
    }
  }

  public string value1 = "one";
  public string value2 = "two";
  public string value3 = "three";
}

Values 次に、コレクションを使用して、名前と実際の値を反復できます。


または、内部 ( 、その場合はおそらく辞書) 構造value1..nを更新するプロパティである可能性があります。Values

または、あなたが本当に卑劣な場合は、Values反射によって生成される可能性があります-違いは、値のソースが分離されていることです.

于 2013-11-07T21:03:18.480 に答える