【问题标题】:What is the most concise way to array a series of string variables that may be empty排列一系列可能为空的字符串变量的最简洁方法是什么
【发布时间】:2015-03-11 01:17:16
【问题描述】:

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

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

【问题讨论】:

    标签: c# arrays string params-keyword


    【解决方案1】:

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

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

    【讨论】:

    • 显然你可以在这里使用任何标准。
    • @lincoln 请看编辑——当我说“我知道我可以使用子函数......”时,我想我很清楚,我希望完全避免它,但我显然不是。
    • @downwitch new string[] { a, b, c, d }.Where(s =&gt; !string.IsNullOrWhiteSpace(s))
    • @DavidSherret 是的,我也试图避免这种事情
    【解决方案2】:

    无子函数

    您可以在没有子函数的情况下执行此操作的最短方法如下:

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

    【讨论】:

      【解决方案3】:
      private List<string> GetUniqueKeys(params string[] list)
      {
          var newList = new List<string>();
          newList.AddRange(list.Where(str => !string.IsNullOrEmpty(str)));
      
          return newList;
      }
      

      【讨论】:

        【解决方案4】:

        使用子方法..

        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 的子方法。

        【讨论】:

          猜你喜欢
          • 2013-09-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-15
          • 2011-02-25
          • 2015-04-11
          • 2010-10-05
          • 1970-01-01
          相关资源
          最近更新 更多