为何这段C#代码无法将值设为null?编译器未识别null却返回空白
问题分析与解决
你的代码里的??(null合并运算符)只在value为null时才会返回"it",但如果传入的是空字符串""(不是null),这个运算符不会触发,所以_clubname会被设为空字符串,也就是你看到的空白内容。
解决方案
根据需求选择以下方式修改setter:
1. 处理null和空字符串
如果要同时把null和空字符串替换为"it",可以用string.IsNullOrEmpty判断:
public string? ClubName { get => _clubname; set { _clubname = string.IsNullOrEmpty(value) ? "it" : value; } }
2. 处理null、空字符串和全空白字符串
如果还要把全是空格的字符串也替换为"it",用string.IsNullOrWhiteSpace:
public string? ClubName { get => _clubname; set { _clubname = string.IsNullOrWhiteSpace(value) ? "it" : value; } }
3. 先去除首尾空格再判断
如果想先去掉字符串首尾的空格,再判断是否为空或null:
public string? ClubName { get => _clubname; set { var trimmedValue = value?.Trim(); _clubname = string.IsNullOrEmpty(trimmedValue) ? "it" : trimmedValue; } }
关键说明
C#中,null(空引用)和空字符串""是完全不同的概念:
null表示变量没有引用任何字符串对象- 空字符串是一个有效的字符串对象,只是长度为0
??运算符只对null生效,所以空字符串不会触发它的替换逻辑。
内容的提问来源于stack exchange,提问作者Konrad
相关产品推荐
相关产品推荐

