Какой самый краткий способ для массива ряда строковых переменных, которые могут быть пустыми
Мне нужно массив специального набора строк, как это
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;
}