我知道这可能听起来像一个非常愚蠢的问题,但我没有回答这个问题。我们的一位用户最近报告了一个错误,我意识到一小段代码使用!= string.Empty
而不是IsNullOrEmpty()
。我用IsNullOrEmpty()
修复了它,它现在运行良好,但我想实际了解问题比较字符串与!=运算符给出不同的结果?
问题是,某些机器上的代码完全相同的一部分运行方式不同。我基本上有一个对象: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
对我来说是假的(有道理),对他来说是真的!模式显然不为空(否则.ToString()
将失败)问题是通过使用IsNullOrEmpty解决的,但我试图弄清楚为什么这不适用于某些用户的机器,而不是其他人。通常在我的测试中,我们有些人没有问题,其他人也没有问题。
我真的不明白我能学到什么。为什么他的模式与null和String.Empty
不同,但IsNullOrEmpty
返回true?另外请注意,修剪实际上也是string.Empty
以及
谢谢!
'IsNullOrEmpty'实际上是由'Length'比较0 – juharr
尝试还打印出'上下文[“模式”]做的空白部分。 GetType()。Name“。 – juharr
您可以提供更多关于'context [“MODE”]'中的值来源的细节吗?另外,您是否确保两个机器上的.NET版本相同? –