我正在尝试使用变量作为标识符(我可能会将其称为错误)。让我尝试在示例中解释它(我省略了大部分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;
}
}
因此,想法是创建包含参数和值列表的类,然后遍历所有这些对象,将这些参数添加到命令并从类中分配值。当我试图使用变量“element”从类中调用值来告诉程序它应该从类调用哪个对象时,问题就出现了
答案 0 :(得分: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);
}
}
}
答案 1 :(得分: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
,但在这种情况下可能是字典)结构的属性。
或者,如果你真的很狡猾,Values
可以通过反思生成 - 不同之处在于价值来源是分开的。