C#:如何从另一个变量构造变量

时间:2010-04-22 17:18:36

标签: c# winforms .net-3.5

如何在C#中构造新变量。

我的意思是,要像这样......

public void updateXXX(string endingOfVariable, int newValue)
{
   this.textBox_{endingOfVariable} = newValue;
}

这是在Php中实现的:

$a = 'var'; $b = 'iable';
$variable = 'var';
echo ${$a.$b};

但也许在C#中是可能的。

问题在于 - 我在C#Windows窗体中创建了~500个文本框,如果我想设置一个值,我需要构建 一个开关(){case:;有500个案例的陈述。

5 个答案:

答案 0 :(得分:7)

如果您为每个TextBox指定了名称,则可以创建将名称映射到控件的字典:

var boxes = form.Controls.OfType<TextBox>().ToDictionary(t => t.Name);

public void Update(string name, int newValue)
{
    boxes[name].Text = newValue.ToString();
}

答案 1 :(得分:4)

忽略您正在执行500个案例的switch语句这一事实,您可以使用FindControl方法,并将其强制转换为TextBox。

((TextBox)FindControl("textbox_" + endingOfVariable)).Text = newValue;

答案 2 :(得分:0)

在Windows窗体中有500个文本框本身就是一个问题(太多的控件可能很慢)。

执行此操作的一种方法是在创建控件时将控件放入字典中(希望您以编程方式创建它们),然后使用字典键来提取所需的控件。

答案 3 :(得分:0)

您需要使用反射

  static void Main( string[] args )
  {
    Type type = typeof(MyClass);
    object o = Activator.CreateInstance(type);

    FieldInfo field = type.GetField("text", BindingFlags.NonPublic | BindingFlags.Instance);
    field.SetValue(o, "www.domain.com");
    string text = (string)field.GetValue(o);

    Console.WriteLine(text);

  }

来自java2s

答案 4 :(得分:-1)

没办法老兄。你不能这样做。