在C#中将变量粘贴为标识符

时间:2013-11-07 20:58:58

标签: c#

我正在尝试使用变量作为标识符(我可能会将其称为错误)。让我尝试在示例中解释它(我省略了大部分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”从类中调用值来告诉程序它应该从类调用哪个对象时,问题就出现了

2 个答案:

答案 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可以通过反思生成 - 不同之处在于价值来源是分开的。