gpt4 book ai didi

c# - 测试空字符串不会抛出 NullReferenceException

转载 作者:行者123 更新时间:2023-11-30 20:50:06 29 4
gpt4 key购买 nike

这可能已经有人问过了。我搜索了 SO 并发现了一些关于 Null VS String.Empty 的问题,但我很好奇为什么以下语句不会抛出 NullReferenceException:

String value = null;

if (value != "x") { // does not throw Exception here

String test = value.Trim(); // throw Exception here as expected

}

最佳答案

EqualityInequality 运算符对于 strings 是重载的。所以当你这样做时:

value != "x"

它调用 System.String::op_Inequality 调用 String.Equals 方法:

public static bool operator != (String a, String b) 
{
return !String.Equals(a, b);
}

String.Equals是这样实现的:

public static bool Equals(String a, String b)
{
if ((Object)a == (Object)b)
{
return true;
}

if ((Object)a == null || (Object)b == null)
{
return false;
}
if (a.Length != b.Length)
return false;

return EqualsHelper(a, b);
}

如您所见,它将 strings 转换为 object 并在其中一个等于 null< 时返回 false/code>。我假设你对为什么比较 string 不返回 null 感到困惑,因为它们是通过值而不是引用进行比较的,因此我分享一些细节。但通常比较 null code>null 对象永远不会抛出 NullReferenceException。只有当您尝试调用 null 对象上的方法时才会抛出该异常。

关于c# - 测试空字符串不会抛出 NullReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22820867/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com