排列一系列可能为空的字符串变量的最简洁方法是什么
What is the most concise way to array a series of string variables that may be empty
我需要像这样排列一组临时字符串
string a = null;
string b = "include me";
string c = string.Empty;
string d = "me too!";
不包括 null 或空字符串。我知道我可以使用子函数 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,但我应该说明我试图完全摆脱子方法,而不是简化它.
private List<string> GetUniqueKeys(params string[] list)
{
var newList = new List<string>();
newList.AddRange(list.Where(str => !string.IsNullOrEmpty(str)));
return newList;
}
如果输入的字符串是可枚举的,可以使用linq。
var result = stringList.Where(s => !string.IsNullOrWhiteSpace(s)).ToArray();
无子函数
没有子函数的最短方法如下:
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);
使用子方法..
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
的子方法。
我需要像这样排列一组临时字符串
string a = null;
string b = "include me";
string c = string.Empty;
string d = "me too!";
不包括 null 或空字符串。我知道我可以使用子函数 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,但我应该说明我试图完全摆脱子方法,而不是简化它.
private List<string> GetUniqueKeys(params string[] list)
{
var newList = new List<string>();
newList.AddRange(list.Where(str => !string.IsNullOrEmpty(str)));
return newList;
}
如果输入的字符串是可枚举的,可以使用linq。
var result = stringList.Where(s => !string.IsNullOrWhiteSpace(s)).ToArray();
无子函数
没有子函数的最短方法如下:
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);
使用子方法..
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
的子方法。