使用此构造测试 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
我遇到的一段代码很困惑:
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