【问题标题】:C#: How to construct a variable from another variablesC#:如何从另一个变量构造一个变量
【发布时间】:2010-04-22 17:18:36
【问题描述】:

如何在 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 个文本框,如果我想设置一个值,我需要构建 一个 switch() {case:; } 500 个案例的声明。

【问题讨论】:

  • 我将复制粘贴我对另一个帖子的回复:“我已经以可视化编程的形式以 Windows 形式创建了它们(拖放,然后根据需要对其进行格式化) - 我现在能做什么? "
  • 从典型的 Apple 或 Google UI 中获得灵感 ;-) stuffthathappens.com/blog/2008/03/05/simplicity

标签: c# winforms .net-3.5


【解决方案1】:

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

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

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

【讨论】:

  • @dtb: +1,这是一种非常巧妙的字典构建方式。
  • 您应该在 ToDictionary 之前添加一个 .Where(t => !string.IsNullOrEmpty(t.Name)) 以防止捕获没有名称的 TextBox 并导致构建字典时出现异常。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    一种方法是在创建控件时将它们放入字典中(希望您以编程方式创建它们),然后使用字典键取出您需要的控件。

    【讨论】:

    • 我已经在 Windows 窗体中创建了它们作为可视化编程(拖放,然后根据需要格式化它们) - 我现在能做什么?
    • 您手动拖放 500 个文本框并给它们重命名?哎呀,我希望你得到报酬。
    • 是的,在我的工作中,我被要求 - '你必须这样做,如果你不想怎么做,那就是你的问题',所以'我做到了':D
    【解决方案4】:

    你需要使用反射

      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

    【讨论】:

    • 他并不需要使用反射。 FindControl 会更聪明,imo。
    • @sr pt:是的,我同意,反射是一般的解决方案,但是如果使用表单控件,那么 FindControl 可能会更好。没想到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-22
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    相关资源
    最近更新 更多