设置其名称在C#中通过字符串传递的变量值

时间:2017-07-06 13:26:01

标签: c# variables

我正在搜索一种方法,用于动态设置从数据库中读取名称和值的变量列表的值。

我找到了很多用于获取变量名称和值的代码,但没有任何用于设置值的代码。

我会试着更好地解释自己。 想想拥有一个包含两列的数据库,比如“name”和“value”。 比如你有两条记录:

1)Name =“string1”,Value =“message1” 2)Name =“string2”,Value =“message2”

我有代码来读取这两条记录,我想要的是一种方法,从记录中获取变量的名称,并为它们分配相应的值。

代码是这样的:

SqlCommand cmd = new SqlCommand("Select Name, " + lng + " from dbo.traductions", Global.languageconn);
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
    var v1 = dr["Name"].ToString();
    var v2 = dr[lng].ToString();

    //Something here to assign the value stored in v2 to the variable whose name is stored in v1

}

谢谢大家

2 个答案:

答案 0 :(得分:1)

我不知道你为什么要这样做,但为什么不用字典?

SqlCommand cmd = new SqlCommand("Select Name, " + lng + " from dbo.traductions", Global.languageconn);
SqlDataReader dr = cmd.ExecuteReader();
var variables = new Dictionary<string, string>();
while (dr.Read())
{
    var v1 = dr["Name"].ToString();
    var v2 = dr[lng].ToString();
    variables.Add(v1, v2);
}

然后使用它们:

var x= variables[v1];

更新

我看到你添加了一条说明你需要引用对象的说明。您可以将“词典”更改为保留对象。你没有提到类型,所以为了论证,我会假设它们都是文本框:

SqlCommand cmd = new SqlCommand("Select Name, " + lng + " from dbo.traductions", Global.languageconn);
    SqlDataReader dr = cmd.ExecuteReader();
    var variables = new Dictionary<string, object>();
    while (dr.Read())
    {
        var v1 = dr["Name"].ToString();
        var v2 = dr[lng].ToString();
        var textbox = new TextBox() { Text = v2 };
        variables.Add(v1, textbox);
    }

然后按名称使用它们:

var textbox= variables[v1];

答案 1 :(得分:0)

根据您的评论,您希望按姓名访问&#34;控件&#34 ;;这是通过Controls.Find()完成的:

Control ctl = this.Controls.Find(v1, true).FirstOrDefault();
if (ctl != null && ctl is TextBox)
{
    TextBox tb = (TextBox)ctl;
    tb.Text = v2;
}