【问题标题】:Handling empty strings in C# ?? operator在 C# 中处理空字符串??操作员
【发布时间】:2011-08-02 18:42:09
【问题描述】:

我正在使用以下代码:

string x = str1 ?? str2 ?? str3 ??  "No string";

但是,如果这些字符串(str1、str2、str3)中的任何一个是 String.Empty,即 !=null 怎么办?

我该如何处理这种情况?

【问题讨论】:

    标签: c#


    【解决方案1】:

    你不能用??。你可以使用 Linq 做这样的事情:

    string x = new[]{ str1, str2, str3, "No string" }.First(x => !string.IsNullOrEmpty(x));
    

    【讨论】:

    • 你沃利 - 你的条件 x != null 只是复制了原始解决方案而没有解决问题:-)
    • @Dan:该死,以为没人看到;)
    • 可能是简洁的添加:如果这是在使用参数数组 (GetNonEmpty(params string[] args)) 声明的辅助方法中,那么您可以跳过数组并调用 GetNonEmpty(str1, str2, "No string")
    • @Dan:是的,我永远无法弄清楚我应该把这样的方法放在哪里。 Util 课程看起来很恶心。
    • 是的,我试图找到一种方法使其成为扩展方法,但感觉也不对......
    【解决方案2】:

    我会写一个辅助方法:

        public static string Coalesce(string defaultValue, params string[] values) {
            if (string.IsNullOrEmpty(defaultValue))
                throw new ArgumentException("defaultValue");
    
            foreach (var value in values) {
                if (!string.IsNullOrEmpty(value))
                    return value;
            }
            return defaultValue;
        }
    

    用法:

    var data = StringHelpers.Coalesce("No text", s1, s2, s3, s4);
    

    这不是特别有用,但你甚至可以创建一个扩展方法(在第一个参数前附加“this”),也许改成一个更“流畅”的名称,并编写如下内容:

    var data = "No Text".IfEmptyOrNull(s1, s2, s3);
    

    【讨论】:

    • 这是一个非常尴尬的使用模式,不是吗?我应该澄清一下 - 扩展方法是一种尴尬的使用模式。
    • 是的,它看起来像带有“1.minutes_from_now”表达式的红宝石
    【解决方案3】:

    您可以使用String.IsNullOrEmpty()

    例如

    String.IsNullOrEmpty(null)            => true
    String.IsNullOrEmpty("")              => true
    String.IsNullOrEmpty("hello, world!") => false
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-22
      • 2012-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多