Unity C#中空字符串判断始终返回false问题排查
问题
我编写了如下C#代码,用于判断GameObject上挂载的Text组件文本是否为空:
if (string.IsNullOrEmpty(inputFieldText.text) || string.IsNullOrWhiteSpace(inputFieldText.text) || inputFieldText.text == "" || inputFieldText.text.Trim() == string.Empty ) { //Do my stuff }
但通过调试器(见附图)可见字符串为空,可尝试的所有判断方法却都返回false。请问我忽略了什么?
分析与解决办法
- 字符串大概率包含不可见的特殊字符,比如全角空格、零宽空格(U+200B)、非标准换行符这类。
string.IsNullOrWhiteSpace只能识别半角空格、普通换行、制表符,全角空格或零宽字符不在它的判断范围内。你可以把字符串转成字符数组,逐个查看字符的Unicode编码,就能确认是否存在这类特殊字符。 - 直接查看字符串的长度:在调试器里看
inputFieldText.text.Length的数值,如果长度大于0,说明确实有隐藏内容。 - 解决时可以先清理所有不可见控制字符,比如用正则表达式替换:
Regex.Replace(inputFieldText.text, @"\p{C}", ""),之后再判断处理后的字符串是否为空。 - 另外排查下是否有其他代码在你执行判断前动态修改了Text组件的text属性,可以在判断代码前加断点,跟踪text属性的实时值变化。
内容的提问来源于stack exchange,提问作者Max_Power89
相关产品推荐
相关产品推荐

