You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中字符串属性为null时与string.Empty比较返回false的原因

为什么用string.Empty比较未初始化的字符串属性返回false?

你猜的完全没错——问题核心在于未初始化的字符串字段默认值是null,而非string.Empty。

在C#里,所有引用类型(包括string)的字段如果没有手动赋值,默认都会被初始化为null,表示这个变量没有指向任何实际的对象。而string.Empty本质就是一个长度为0的空字符串对象(和""完全等价),这是一个实实在在存在的字符串实例。

看你的代码:

private string _id; // 未初始化,默认值是null
public string Id 
{
   get => _id;
   set
   {
      if (value != string.Empty)
         _id = value;
   }
}

如果从来没有给Id属性赋值过,Id返回的就是_id的默认值null。这时候用Id == string.Empty比较,就是拿null和一个空字符串对象比,结果自然是false;换成Id == null时,两边都是null,所以返回true。

正确的处理方式

如果要同时兼容null和空字符串的场景,推荐用C#内置的方法:

if (string.IsNullOrEmpty(Id))
{
   // 处理Id为null或空字符串的逻辑
}

也可以手动组合判断:

if (Id == null || Id == string.Empty)
{
   // 同上逻辑
}

另外,如果想让属性默认值是空字符串而非null,可以直接初始化私有字段:

private string _id = string.Empty;

这样即使没给Id赋值,Id返回的也是string.Empty,原来的判断条件就能正常工作了。

内容的提问来源于stack exchange,提问作者realMiZZeR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 09:37:11