如何检查字符串是否为空

59

我想知道是否有一种特殊的方法/技巧来检查一个String对象是否为null。我知道String.IsNullOrEmpty方法,但我想区分一个null字符串和一个空字符串(="")。

我应该简单地使用:

if (s == null) {
    // blah blah...
}

...或者还有其他方法吗?


3
@Thilo: 我不需要。只是想学习如何最好地使用C#。 - Otiel
其实,你问这个问题是很好的。在C#中似乎很简单,但是例如在Javascript中,关于空值检查有很多微妙之处。 - Thilo
6个回答

90

一个对象不能为null - 一个表达式的值可以为null。 在你的脑海中清晰区分这两者是值得的。s的值不是一个对象 - 它是一个引用,它可以是null或指向一个对象。

而且,是的,你应该只使用

if (s == null)

请注意,这仍将使用在字符串中定义的重载 == 运算符,但那样做是正确的。


@Thilo:不,我怀疑这一点。==的实现必须是有问题的才能起到帮助作用,而调用代码变得更加丑陋。 - Jon Skeet
@Thilo:我宁愿不使用有问题的代码,也不想使用一个只有第一个参数为空时才能正常工作的==实现。谁能保证它不会被改成另一种方式呢?请注意,假设声明是对称的,无论哪种方式调用相同的重载。 - Jon Skeet

35
你可以使用“null coalescing”运算符(双问号)来检查字符串或其他可空值类型中是否为 null:

你可以使用“null coalescing”运算符(双问号)来检查字符串或其他可空值类型中是否为 null:

textBox1.Text = s ?? "Is null";
运算符'??'检查's'的值是否为null,如果不是,则返回's';如果它为空,则返回运算符右侧的值。
更多信息在这里: https://msdn.microsoft.com/en-us/library/ms173224.aspx 还值得注意的是,在C# 6.0(和VB)中引入了空条件运算符?.和?[。
textBox1.Text = customer?.orders?[0].description ?? "n/a";

如果描述为null,或订单为null,或客户为null,则返回“n/a”,否则返回描述的值。

更多信息请参见: https://msdn.microsoft.com/en-us/library/dn986595.aspx


这是那种答案之一,可能不是作者寻找的确切答案,但它绝对补充了我的C#编程技能。我总是喜欢阅读其他答案,以发现比我所寻找的更多内容。 - Tim Sanders

32

为确保准确性,您应该使用以下函数来检查null和空值:

string str = ...
if (!String.IsNullOrEmpty(str))
{
...
}

6
作者想要准确检查是否为空值(不是 null 或空字符串)。 - kost
这是一个很好的答案,如果有人想要检查空值和空字符串,但这不是问题所问的。 - Gaurav Mall
也许作者想在字符串为空(而不是null)的情况下采取不同的代码路径。 - CMD

6

如果您使用的是 C# 7.0 或更高版本,则可以使用 is null

if (s is null) {
    // blah blah...
}

同时,注意在处理字符串时,您可能还需要考虑使用IsNullOrWhiteSpace,它可以验证字符串是否只包含空格。


0

针对 .net 5(可能也适用于 .net Core 3.1)

不同的写法,但问题总是一样。

string wep = test ?? "replace";
Console.WriteLine(wep);

结果: "替换"

或者

string test=null;
test ??= "replace";
Console.WriteLine(test);
test="";
test??="replace";
Console.WriteLine(test);
  • 第一次尝试:"替换"
  • 第二次尝试:空白
string test="";
if(test is null)
    Console.WriteLine("yaouh");
else
    Console.WriteLine("Not yahouu");

结果:"不是雅虎"


这在.NET Framework中也是可能的。自C# 7规范以来,“object is null”可用。 - Otiel

-8

您可以使用 null 或 Number 进行检查。

首先,在您的应用程序中添加对 Microsoft.VisualBasic 的引用。

然后,使用以下代码:

bool b = Microsoft.VisualBasic.Information.IsNumeric("null");
bool c = Microsoft.VisualBasic.Information.IsNumeric("abc");

在上述代码中,bc 都应该是 false

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接