如何在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个案例的陈述。
答案 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)
没办法老兄。你不能这样做。