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

改用适当的集合 - “动态”变量名称只能通过反射来实现,并且在大多数情况下应避免一次性使用。

您可以使用普通字段/属性,并且仍然可以适当地包装它们——这很好,因为仍然公开了强静态类型,并且可以在外部指定值。例如:

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,但在这种情况下可能是 Dictionary ) 结构的属性。

或者,如果你真的很狡猾,Values可以通过反射生成 - 不同之处在于值源是分开的。

于 2013-11-07T21:03:18.480 回答