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
相关产品推荐
相关产品推荐

