循环通过具有相似名称

时间:2016-12-30 14:14:57

标签: c# loops

我有这个代码,似乎太重复了,所以我想用一个循环来改善它:

            //Converts a text in a integer using a custom method based on int.TryParse
            int a1 = determinantes.aEntero(a1Box.Text);
            int a2 = determinantes.aEntero(a2Box.Text);
            int a3 = determinantes.aEntero(a3Box.Text);
            int b1 = determinantes.aEntero(b1Box.Text);
            int b2 = determinantes.aEntero(b2Box.Text);
            int b3 = determinantes.aEntero(b3Box.Text);
            int c1 = determinantes.aEntero(c1Box.Text);
            int c2 = determinantes.aEntero(c2Box.Text);
            int c3 = determinantes.aEntero(c3Box.Text);
            //I pass those new ints to a method to do something with them
            resultado.Text = determinantes.detGrado3(a1, a2, a3, b1, b2, b3, c1, c2, c3).ToString();

第一部分可以使用数组a [1],a [2]来完成......但是我需要更改变量的名称以使用相同的字母开头。

第二部分我不知道如何做到这一点。我虽然做了像

这样的事情
 a[counter] = determinantes.aEntero(a[counter]Box.Text);

但显然这不起作用。那么,你有什么想法我可以在该代码中使用循环吗?

谢谢;)

[UPDATE] 我也在“清除”按钮的代码中遇到同样的问题:

        a1Box.Text = "";
        a2Box.Text = "";
        a3Box.Text = "";
        b1Box.Text = "";
        b2Box.Text = "";
        b3Box.Text = "";
        c1Box.Text = "";
        c2Box.Text = "";
        c3Box.Text = "";
        d1Box.Text = "And so on till the infinite!";

[UPDATE] 最后我来了。我认为现在就是这样。谢谢大家!

TextBox[] boxes = new TextBox[] { a1Box, a2Box, a3Box, b1Box, b2Box, b3Box, 

c1Box, c2Box, c3Box };
int[] enteros = new int[boxes.Length];

for (int f = 0; f < boxes.Length; f++) {
    enteros[f] = determinantes.aEntero(boxes[f].Text);
}

resultado.Text = determinantes.detGrado3Arr(enteros).ToString();

4 个答案:

答案 0 :(得分:2)

  

那么,您对我在该代码中如何使用循环有什么想法吗?

您将所有类似的变量放入容器(数组或List<>可能是最简单的),然后循环它们。

作为一般编程提示:当您注意到自己给变量赋予数字时,请停止并使用容器。

答案 1 :(得分:0)

我说要将文本值抛出到数组中,循环遍历,然后分配给第二个数组,然后告诉消费函数将其作为参数。

伪:

string[] boxes = new string[] {a1box.Text, a2box.Text, ...etc etc ...lastbox.Text};
int[] results = new int[boxes.length];
for(i = 0; i < results.Count; i++)
{
     results[i]= determinantes.aEntero(boxes[i]);
}
resultado.Text = determinantes.detGrado3(results)  
//you should return a string 
//instead of using the ToString() method if possible`

此外,还有一种内置的方式可以处理您的“清除”问题。问题。

foreach(Control c in this.Controls)
{
   if(c.GetType = typeof(TextBox))
   { ((TextBox)c).Clear(); } //or ((TextBox)c).Text = string.Empty, if you prefer  
}

答案 2 :(得分:0)

这可能无法满足您的确切需求,但我认为它会接近您想要的。

library(data.table)
data <- data.table(id = c(11111111111111, 11111111111112))
data[id == 11111111111111]
data[as.numeric(id) == 11111111111111]
data[, .N, by = id]
data[, .N, by = as.numeric(id)]
data[, .N, by = as.character(id)]

答案 3 :(得分:0)

var ints = new Dictionary<TextBox, int>();
foreach(var tb in new[] {
       a1Box, a2Box, a3Box, a4Box, a5Box, ... , anBox})
   ints.Add(tb, determinantes.aEntero(tb.Text));

获取任何框的整数值,

var x = ints[a1Box];

但更好的是,只需动态执行...在TextBox上创建扩展名。

 public int IntegerValue(TextBox this tb)
 { return determinantes.aEntero(tb.Text)); }

然后,在代码中的任何位置,您只需编写a1Box.IntegerValue()

即可获得整数值
  var x = a1Box.IntegerValue();