如何使这个简单的C#代码更加高效/优雅

时间:2015-04-23 14:09:09

标签: c#

我有三个textBox,textBoxLectura1textBoxLectura2textBoxLectura3。当有人点击按钮button3时,我只想打印用户写的条目。

我制作了这段代码并且完美无缺。我想知道如果没有使用那么多if语句,是否有更优雅/有效的方法。我想保留arrayList结构。

    private void button3_Click(object sender, EventArgs e)
    {

        ArrayList myarray2 = new ArrayList();

        if (string.IsNullOrWhiteSpace(textBoxLectura1.Text) == false)
        {
            myarray2.Add(textBoxLectura1.Text);
        }

        if (string.IsNullOrWhiteSpace(textBoxLectura2.Text) == false)
        {
            myarray2.Add(textBoxLectura2.Text);
        }

        if (string.IsNullOrWhiteSpace(textBoxLectura3.Text) == false)
        {
            myarray2.Add(textBoxLectura3.Text);
        }

        if (myarray2.Count > 0)
        {
            foreach (string values in myarray2)
            {
                Console.WriteLine(values );
            }
        }
        else
        {
            MessageBox.Show("no entrys");
        }

    }

6 个答案:

答案 0 :(得分:8)

最简单的方法可能是:

var strings = new List<string>() 
{
    textBoxLectura1.Text,
    textBoxLectura2.Text,
    textBoxLectura3.Text
};

var output = string.Join('\n',strings.Where(s => !string.IsNullOrEmpty(s));
if (!string.IsNullOrEmpty(output)) 
{
    Console.Writeline(output);
}
else
{
    MessageBox.Show("no entrys");
}

这里有几点。不要使用ArrayList。键入的List<T>几乎在所有方面都更好。 ArrayList是C#的遗留物,因为它没有泛型。使用ArrayList的唯一原因是,如果您正在处理需要它的一些遗留(2.0之前的)代码。 List<object>功能等同于ArrayList,但由于很多时候您处理同类集合,因此使用List<T>更容易T你填充你的集合的类型是什么(在这种情况下是string),而不是每次你尝试从你的集合中获取东西时都要处理。

我们在此处的代码中执行的操作是创建List<string>并立即使用我们所有文本框.Text属性的值对其进行初始化。如果它们在此时为空或空,则无关紧要。

然后我们使用真正有用的string.Join方法。这需要一组字符串并将它们与分隔符粘合在一起。在这种情况下,我们使用换行符(\n)。但是,由于我们不想包含空值或空字符串(String.Join否则会插入额外的换行符),我们使用简单的LINQ .Where语句来仅选择那些不是#39}的字符串。 ; t null或为空。

答案 1 :(得分:4)

这是我的看法。

var notEmpty = new[]  { textBoxLectura1.Text, textBoxLectura2.Text, textBoxLectura3.Text}
    .Where(s => !String.IsNullOrEmpty(s)
    .ToArray();

if (!notEmpty.Any())
{
    MessageBox.Show("No Entries");
    return;
}

Console.WriteLine(string.Join(Environment.NewLine, notEmpty));

我同意其他海报,ArrayList vs IEnumerable<T>实施容器是明智的,你应该使用强类型的集合类型。

答案 2 :(得分:1)

您可以使用功能Check&amp;地址:

private void button3_Click(object sender, EventArgs e)
        {

            ArrayList myarray2 = new ArrayList();

            ChecknAdd(textBoxLectura1, myarray2);
            ChecknAdd(textBoxLectura2, myarray2);
            ChecknAdd(textBoxLectura3, myarray2);

            if (myarray2.Count > 0)
            {
                foreach (string values in myarray2)
                {
                    Console.WriteLine(values);
                }
            }
            else
            {
                MessageBox.Show("no entrys");
            }

        }

        void ChecknAdd(TextBox txt, System.Collections.ArrayList Ary)
        {
            if (string.IsNullOrWhiteSpace(txt.Text) == false)
            {
                Ary.Add(txt.Text);
            }
        }

答案 3 :(得分:1)

创建一个这样的过程:

private void addOnArray(ArrayList array, String text) {

    if (string.IsNullOrWhiteSpace(text) == false)
    {
        array.Add(text);
    }

}

在来电者中:

private void button3_Click(object sender, EventArgs e)
{

    ArrayList myarray2 = new ArrayList();
    addOnArray(myarray2, textBoxLectura1.Text);
    addOnArray(myarray2, textBoxLectura2.Text);
    addOnArray(myarray2, textBoxLectura3.Text);

    if (myarray2.Count > 0)
    {
        foreach (string values in myarray2)
        {
            Console.WriteLine(values );
        }
    }
    else
    {
        MessageBox.Show("no entrys");
    }

  }

答案 4 :(得分:0)

您可以将if(s)缩短为三元运算符...当您添加到List时,它会返回它添加到的索引,否则只需为接收变量赋值-1

然后使用相同的三元逻辑来知道您是否要打印ArrayList的内容,或者只打印&#34; No Entries&#34;

        ArrayList myarray2 = new ArrayList();

        int index = !string.IsNullOrWhiteSpace(textBoxLectura1.Text) ? myarray2.Add(textBoxLectura1.Text) : -1;
        index = !string.IsNullOrWhiteSpace(textBoxLectura2.Text) ? myarray2.Add(textBoxLectura2.Text) : -1;
        index = !string.IsNullOrWhiteSpace(textBoxLectura3.Text) ? myarray2.Add(textBoxLectura3.Text) : -1;

        Console.WriteLine(myarray2.Count > 0 ? string.Join("\n", myarray2.ToArray()) : "No Entries");

答案 5 :(得分:0)

我非常欣赏其他答案中的方法以及它们中的一对解释了为什么要使用Generics和ArrayLists。这就是我执行它的方式(通过 SO 来学习它):

IEnumerable<TextBox> textBoxCollection = this.Controls.OfType<TextBox>();

        foreach (TextBox box in textBoxCollection)
        {
            if (!string.IsNullOrWhiteSpace(box.Text))
            {
                MessageBox.Show(box.Text);   
            }
        }