Какой самый краткий способ для массива ряда строковых переменных, которые могут быть пустыми

Мне нужно массив специального набора строк, как это

string a = null;
string b = "include me";
string c = string.Empty;
string d = "me too!";

без включения нулевых или пустых строк. Я знаю, что могу использовать дочернюю функцию и params:

private List<string> GetUniqueKeys(params string[] list)
{
    var newList = new List<string>();
    foreach (string s in list)
    {
        if (!string.IsNullOrWhiteSpace(s))
            newList.Add(s);
    }
    return newList;
}

///

return this.GetUniqueKeys(a, b, c, d).ToArray();

но есть ли более простой способ сделать это, чего я не вижу?

РЕДАКТИРОВАТЬ: Извините за это, рад голосовать за первый LINQer, но я должен был указать, что я пытался избавиться от дочернего метода в целом, а не упростить его.

4 ответа

Решение

Нет дочерней функции

Кратчайший способ сделать это без дочерней функции заключается в следующем:

var a = new string[] { a, b, c, d }.Where(s => !string.IsNullOrWhiteSpace(s));

С функцией ребенка

Тем не менее, я бы рекомендовал использовать функцию вашего ребенка:

private IEnumerable<string> GetUniqueKeys(params string[] list)
{
    return list.Where(s => !string.IsNullOrWhitespace(s));
}

Метод расширения

В качестве альтернативы, если вы действительно ищете другие варианты... вы можете создать метод расширения:

public static List<string> AddIfNotEmpty(this List<string> list, params string[] items)
{
    list.AddRange(items.Where(s => !string.IsNullOrEmpty(s)));

    return list;
}

Тогда используйте это так:

var list = new List<string>().AddIfNotEmpty(a, b, c, d);

И добавьте другие элементы позже:

list.AddIfNotEmpty("new item", string.Empty);

Если входные строки перечислимы, вы можете использовать linq.

var result = stringList.Where(s => !string.IsNullOrWhiteSpace(s)).ToArray();

С детским методом..

private List<string> GetUniqueKeys(params string[] list)
{
    return list.Where(x => !string.IsNullOrWhiteSpace(x)).ToList();
}

Без ребенка метод..

string a = null;
string b = "include me";
string c = string.Empty;
string d = "me too!";

string[] lst = { a, b, c, d };
var uniqueLst = lst.Where(x => !string.IsNullOrWhiteSpace(x)).ToList(); //Or ToArray();

Я рекомендую использовать дочерний метод с params,

private List<string> GetUniqueKeys(params string[] list)
{
    var newList = new List<string>();
    newList.AddRange(list.Where(str => !string.IsNullOrEmpty(str)));

    return newList;
}
Другие вопросы по тегам