使用此构造测试 null 或空字符串:s is null or ""

Testing null or empty string with this construction: s is null or ""

我遇到的一段代码很困惑:

string s = "this is my dummy string, it could be anything";

if (s is null or "") { // ???
   DoSomething();
}

我从未见过以这种方式测试的字符串。 我一直只看到这个:

if(string.IsNullOrEmpty(s))

我试过谷歌搜索,但涉及的关键字太笼统,找不到任何相关结果。

那么,你怎么看?这是一种新奇有效的字符串测试方法,还是只是一些古怪的习惯?

它们实际上是一样的:

https://docs.microsoft.com/en-us/dotnet/api/system.string.isnullorempty?view=net-5.0#remarks

备注

IsNullOrEmpty is a convenience method that enables you to simultaneously test whether a String is null or its value is String.Empty. It is equivalent to the following code:

bool TestForNullOrEmpty(string s)
{
    bool result;
    result = s == null || s == string.Empty;
    return result;
}

string s1 = null;
string s2 = "";
Console.WriteLine(TestForNullOrEmpty(s1));
Console.WriteLine(TestForNullOrEmpty(s2));

// The example displays the following output:
//    True
//    True

对性能有一个很好的判断。
我把这些代码和运行分开写了。
结果很有见地

using System;
                    
public class Program
{
    public static void Main()
    {
        Console.WriteLine("Start");
        
        string s = "this is my dummy string, it could be anything";
        
        var d1 = DateTime.Now;
        for(var i=0; i<1000000000;i++)
        {
            if(string.IsNullOrEmpty(s))
            {
                Console.WriteLine("Hello Again");
            }
        }
        Console.WriteLine("Method1: " + (DateTime.Now - d1).TotalMilliseconds);
        
        
        Console.WriteLine("End");
    }
}

using System;
                    
public class Program
{
    public static void Main()
    {
        Console.WriteLine("Start");
        
        string s = "this is my dummy string, it could be anything";
        
        var d2 = DateTime.Now;
        for(var i=0; i<1000000000;i++)
        {
            if (s is null or "")
            {
                Console.WriteLine("Hello Again");
            }
        }
        Console.WriteLine("Method2: " + (DateTime.Now - d2).TotalMilliseconds);
        
        Console.WriteLine("End");
    }
}

结果(以毫秒为单位的持续时间):
方法一:2959.476
方法二:4676.6368