我知道这可能听起来是一个非常愚蠢的问题,但我在这个问题上已经没有答案了。我们的其中一个用户最近报告了一个错误,我意识到一段旧代码正在使用`!= string.Empty`而不是`IsNullOrEmpty()`。我用`IsNullOrEmpty()`修复了它,并且现在可以正常运行,但我想真正理解这个问题。
问题是,完全相同的代码在某些机器上运行方式不同。基本上我有一个对象:`context["MODE"]`,它应该是空的。我添加了一些测试来记录:
这里是有关该字段细节的日志记录:
以下是他的日志记录:
正如您所看到的,存在一个区别:
问题是,完全相同的代码在某些机器上运行方式不同。基本上我有一个对象:`context["MODE"]`,它应该是空的。我添加了一些测试来记录:
contextBuilder.AppendLine("MODE: |" + context["MODE"] + "|");
contextBuilder.AppendLine("MODE != string.Empty: " + (context["MODE"] != string.Empty));
contextBuilder.AppendLine("MODE TRIM != string.Empty: " + (context["MODE"].ToString().Trim() != string.Empty));
contextBuilder.AppendLine("MODE.IsNullOrEmpty: " + string.IsNullOrEmpty(context["MODE"].ToString()));
contextBuilder.AppendLine("MODE.TRIM.IsNullOrEmpty: " + string.IsNullOrEmpty(context["MODE"].ToString().Trim()));
这里是有关该字段细节的日志记录:
MODE: ||
MODE != string.Empty: False
MODE TRIM != string.Empty: False
MODE.IsNullOrEmpty: True
MODE.TRIM.IsNullOrEmpty: True
以下是他的日志记录:
MODE: ||
MODE != string.Empty: True
MODE TRIM != string.Empty: False
MODE.IsNullOrEmpty: True
MODE.TRIM.IsNullOrEmpty: True
正如您所看到的,存在一个区别:
MODE != string.Empty
对于我来说是False(有意义),但对他来说是True!显然,MODE不是null(否则.ToString()
会失败)。使用IsNullOrEmpty修复了问题,但我正在尝试弄清楚为什么会在某些用户的计算机上工作而在其他人的计算机上不工作。通常情况下,在我的测试中,有些人没有问题,其他人有问题。
我真的不明白我可以从中学到什么。为什么他的模式与null和String.Empty
不同,但IsNullOrEmpty
返回true?还请注意,trim实际上也是string.Empty
谢谢!
context["Mode"].GetType().Name
。 - juharrcontext["MODE"]
值的更多细节吗?此外,你是否确保两台机器上的.NET版本相同? - Kevin Burdettcontext["MODE"]
在两种情况下都是封装在object
中的string
。是的,这两台机器都运行相同的 .NET 框架! - Damascus