默认字符串初始化:NULL还是空?
默认字符串初始化:NULL还是空?
我一直将字符串初始化为NULL,认为NULL表示没有值,而\"\"或String.Empty是有效的值。最近我看到越来越多的代码示例中,String.Empty被视为默认值或表示没有值。这让我感到奇怪,在C#中新增的可空类型似乎是在使用字符串时倒退,而不是使用NULL来表示“无值”。\n你使用什么作为默认初始化程序?为什么?\n编辑:根据答案,我进一步思考了以下问题:\n
- \n
- 避免错误处理 如果值不应为空,那么为什么首先将其设置为NULL?也许最好在发生错误的地方标识错误,而不是在代码库的其他地方掩盖错误?\n
- 避免空检查 如果您厌倦了在代码中进行空检查,是否更好地将空检查抽象出来?也许包装(或扩展!)字符串方法以使其支持NULL安全?如果您始终使用String.Empty,并且NULL不小心进入系统,您会开始添加NULL检查吗?\n
\n
\n
\n我无法不再次返回到这种观点:这是懒惰。如果您在数据库中使用\'\'而不是NULL,任何数据库管理员都会敲你的脑袋。我认为在编程中也适用相同的原则,应该有人敲那些使用String.Empty而不是NULL来表示无值的人的脑袋。\n
\n
相关问题
\n
\n
默认字符串初始化:NULL还是空?
为什么你希望字符串被初始化?在声明变量时,你不必初始化变量,并且我认为,只有在分配的值在代码块的上下文中有效时,你才应该这样做。
我经常看到这样的写法:
string name = null; // or String.Empty if (condition) { name = "foo"; } else { name = "bar"; } return name;
不初始化为null也是同样有效的。此外,大多数情况下,你希望赋予一个值。通过将其初始化为null,你可能会错过没有分配值的代码路径。就像这样:
string name = null; // or String.Empty if (condition) { name = "foo"; } else if (othercondition) { name = "bar"; } return name; //当condition和othercondition为false时返回null
当你不将其初始化为null时,编译器会生成一个错误,指出并非所有代码路径都分配了一个值。当然,这只是一个非常简单的例子...
在我认识的Visual Studio中,你的第二种情况(没有= null
)会生成一个警告,原因正如你所说的-字符串的默认值是否为null并不重要。如果你不能通过每个代码路径来保证赋值,IDE(和/或我认为是底层编译器[?])将会生成一个警告。虽然警告不会阻止编译,但它们仍然存在-留下那些容易解决的警告可以帮助掩盖可能需要程序员注意的其他警告。
据我所知,第一种情况在不将name
初始化为null
的情况下完全可以正常工作(没有警告),因为每个代码路径都为name
分配了一个值-在那里根本不需要初始化。
默认字符串初始化:NULL还是空?
在编程中,我们经常需要初始化字符串变量。然而,一个常见的问题是应该使用NULL还是空来初始化字符串。这个问题的出现是因为我们希望在操作字符串时减少出现NullReferenceException(空引用异常)的机会。为了解决这个问题,MSDN上建议使用Empty值来初始化字符串,而不是使用NULL。
Empty值是一个表示字符串为空的特殊值。通过使用Empty值来初始化字符串,可以减少出现NullReferenceException的机会。但是,即使减少了异常的发生机会,这并不意味着异常就不应该发生。如果你的代码依赖于一个值的存在,那么它应该抛出异常。
使用IsNullOrEmpty()方法来检查字符串是否为NULL或者为空是一个好的实践。这个方法可以判断一个字符串是否为NULL或者为空,并且可以帮助我们避免NullReferenceException的发生。
然而,是否使用NULL或者空来初始化字符串也取决于编码风格、经验和具体情况。如果你只是简单地将字符串拼接在一起,那么使用NULL或者空来初始化字符串可能是合适的选择。
另外,对于.NET Framework 4+,还有一个IsNullOrWhiteSpace()方法可以用来判断字符串是否为NULL、空或者只包含空白字符。
总之,初始化字符串时应该根据具体情况选择使用NULL、Empty或者其他合适的值。通过合适的初始化,我们可以减少出现NullReferenceException的机会,提高代码的健壮性和可靠性。
在编程中,有时候需要为字符串设置默认值。然而,关于字符串的默认初始化方式,有一个争议:是使用NULL还是使用空字符串(Empty)。
有人认为,使用空字符串表示“有效但为空”,而使用NULL表示“无效”。比如,当需要设置一个用户的中间名时,可以使用空字符串作为默认值。而当后续代码没有显式设置值时,使用NULL表示错误。
对于NULL和空字符串的区分在于它们代表的含义不同。然而,在一些情况下,NULL和空字符串代表的含义是相同的。因此,同时使用两种方式来表示相同的情况可能会带来麻烦。
另一方面,一些人认为,使用NULL或空字符串来区分有效和无效值是有益的。这样简单而一致的约定可以使代码更易于理解。例如,使用"if (var)"来测试布尔值,使用"if (var != NULL)"来测试指针,使用"if (var != 0)"来测试整数。这些代码对编译器来说具有相同的含义,但对于维护代码的开发人员来说,它们传递了额外的信息,有助于理解代码。
关于使用NULL或空字符串来表示相同情况是否会带来麻烦的问题,有人认为,NULL或Empty表示的是两种不同的条件:有效和无效。举个例子,对于用户配置文件中的字段,NULL可以表示用户尚未填写该信息,而Empty则表示用户填写了该信息,然后又擦除了。同时,NULL还可以表示属性或对象从未存在或尚未存在,这可能是一种完全有效的情况。
总结起来,关于字符串的默认初始化方式,使用NULL还是空字符串,存在不同的观点和争议。选择使用哪种方式取决于具体的需求和情况。有时候使用空字符串更合适,有时候使用NULL更合适。重要的是保持一致性,并在代码中明确标注每种情况的含义,以便于其他开发人员能够理解和维护代码。