如何在C#中循环名称

我有10个文本框,即TB1,TB2,TB3,TB4等。到TB10

我想将它们存储到名为toBeStored的单个字符串值中。

现在我正在做手动方式

String toBeStored=null; tobeStored=TB1.text.toString(); tobeStored+=TB2.text.toString(); 

等等..

我想制作一个for循环并添加它们

像这样的东西..

 for(int i=1;i<11;i++) { toBeStored+=TB+i+.text.ToString()+" "; } 

我知道那是错的..有什么事情要做对吗?

不会。因为您将文本框定义为变量,所以根本没有定义枚举数。

您可以定义自己的枚举器。 在最简单的情况下,就像

 TextBox boxes [] = new TextBox [] { TB1, TB2, TB3....} foreach (TextBox box in boxes) { } 

虽然我认为这个前提可能存在缺陷,但你可以做到这一点

 for (int i = 1; i <= 10 ; i++) { TextBox textbox = (TextBox)Page.FindControls( "TB" + i.ToString); toBeStored += textbox.Text; } 

将控件放入数组中,然后迭代数组。

首先,你没有告诉我们你是使用winforms,webforms还是什么。 那会很好。

其次,你可能不需要在Text属性上使用.ToString(),我假设它已经是一个字符串。

最后,如果你坚持懒惰,那么把文本框放到一个数组中,然后遍历数组:

 private TextBox[] _textBoxes = new TextBox[10]; // In init code: TextBox[0] = TB1; TextBox[1] = TB2; // ... StringBuilder toBeStored = new StringBuilder(); for (int i=0; i<10; i++) { toBeStored.Append(TextBox[i].Text); } // Now process toBeStored.ToString(); 

如果要按名称获取字段,则可以使用reflection。

 Type type = GetType(); for (int i = 1; i <= 10; i++) { var name = "TB" + i; var field = type.GetField(name, BindingFlags.Instance | BindingFlags.NonPublic); //or appropriate flags TextBox tb = (TextBox)field.GetValue(this); //... } 

如果要做这样的事情,我会创建一个帮助方法来将文本累积到一个字符串中。

  public string AccumulateNames(params string[] names) { return names.Aggregate(string.Empty, (current, name) => current + name); } 

这将被称为类似于此

var toBeStored = AccumulateNames(TB1.Text,TB2.Text,…,TBn.Text);