Сократить код Добавить словарь с условием - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть этот код:

Dictionary<string, string> items = new Dictionary<string, string>();
if(TextBox1.Text != "")
{
    items.Add(TextBox1.Name, TextBox1.Text);
}
if (TextBox2.Text != "")
{
    items.Add(TextBox2.Name, TextBox2.Text);
}
if (TextBox3.Text != "")
{
    items.Add(TextBox3.Name, TextBox3.Text);
}

Работает нормально, но есть около 20 TextBox элементов, и я хочу уменьшить избыточность.Есть ли способ сделать это короче?

Ответы [ 4 ]

0 голосов
/ 04 декабря 2018

Вы можете использовать Controls коллекцию формы и отфильтровать ее по типу элемента управления, используя метод OfType, а затем преобразовать ее в словарь:

var tbs = this.Controls.OfType<TextBox>()
    .Where(tb => ! string.IsNullOrEmpty(tb.Text))
    .ToDictionary(tb => tb.Name, tb => tb.Text);
0 голосов
/ 04 декабря 2018

Создайте для этого функцию.

public function test(TextBox text)
{
    if(text.Text != "")
    {
        items.Add(text.Name, text.Text);
    }
}

В вашей основной функции просто вызовите эту функцию выше, как это

test(TextBox1);
0 голосов
/ 04 декабря 2018

Вы можете использовать массив, который содержит все текстовые поля и использовать Where и ToDictionary

var dic = new[] { TextBox1, TextBox2, TextBox3, TextBox4, TextBox5 }
    .Where(t => t.Text != "")
    .ToDictionary(t => t.Name, t => t.Text);
0 голосов
/ 04 декабря 2018

Вы можете добавить текстовые поля в коллекцию, а затем использовать LINQ:

TextBox[] allTxt = {TextBox1,TextBox12,TextBox3,...};

Dictionary<string, string> items = allTxt
    .Where(txt => !string.IsNullOrEmpty(txt.Text))
    .ToDictionary(txt => txt.Name, txt => txt.Text);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...