排列一系列可能为空的字符串变量的最简洁方法是什么

时间:2015-03-11 01:17:17

标签: c# arrays string params-keyword

我需要像这样排列一组特殊的字符串

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投票,但我应该指定我试图完全摆脱子方法,而不是简化它。

4 个答案:

答案 0 :(得分:4)

如果输入字符串是可枚举的,则可以使用linq。

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

答案 1 :(得分:3)

无子功能

没有子功能的最短方法如下:

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);

答案 2 :(得分:0)

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

    return newList;
}

答案 3 :(得分:0)

使用Child方法..

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();

我建议将{child}方法与params一起使用。