在C#中,我想用空字符串初始化字符串值.
我该怎么做?什么是正确的方法,为什么?
string willi = string.Empty;
Run Code Online (Sandbox Code Playgroud)
要么
string willi = String.Empty;
Run Code Online (Sandbox Code Playgroud)
要么
string willi = "";
Run Code Online (Sandbox Code Playgroud)
或者是什么?
我总是将我的字符串初始化为NULL,认为NULL表示没有值,""或String.Empty是一个有效值.我最近看到了更多代码示例,其中String.Empty被视为默认值或不表示任何值.这让我感到很奇怪,在c#中新添加的可空类型似乎我们通过不使用NULL来表示"无值"来向后调整字符串.
您使用什么作为默认初始化程序?为什么?
编辑:根据答案,我进一步思考
避免错误处理如果值不应为null,为什么它NULL首先设置为?也许最好在发生错误的位置识别错误,而不是在代码库的其余部分覆盖错误?
避免空检查如果您厌倦了在代码中进行空检查,那么抽象空检查是不是更好?也许包装(或扩展!)字符串方法以使它们NULL安全吗?如果你经常使用String.Empty并且null正好进入你的系统会发生什么,你是否开始添加NULL检查?
我忍不住回到懒惰的意见.如果你使用''而不是null在他的数据库中使用',那么任何DBA都会狠狠地打你九种方式.我认为同样的原则适用于编程,并且应该有人打击那些使用String.Empty而不是NULL代表没有价值的人.
相关问题
我正在阅读Bill Wagner的Effective C#.在第14项 - 最小化重复初始化逻辑中,他显示了以下在构造函数中使用新的可选参数功能的示例:
public MyClass(int initialCount = 0, string name = "")
请注意,他使用""而不是string.Empty.
他评论道:
您将注意到[在上面的示例中]第二个构造函数为name参数指定了默认值,而不是更常用的
string.Empty.那是因为string.Empty它不是编译时常量.它是字符串类中定义的静态属性.因为它不是编译常量,所以不能将它用作参数的默认值.
如果我们不能string.Empty在所有情况下使用静态,那么这不是打败了它的目的吗?我认为我们会用它来确保我们有一个独立于系统的方法来引用空字符串.我的理解错了吗?谢谢.
更新
只是后续评论.根据MSDN:
每个可选参数都有一个默认值作为其定义的一部分.如果没有为该参数发送参数,则使用默认值.默认值必须是常量.
然后我们无法使用它们System.Environment.NewLine,或者使用新实例化的对象作为默认值.我还没有用过VS2010,这太令人失望了!
如何创建这样的XML文档?
<body>
<level1>
<level2>text</level2>
<level2>other text</level2>
</level1>
</body>
Run Code Online (Sandbox Code Playgroud)
使用XmlDocument在C#
在考虑代码性能时,在C#中检查空字符串的最佳方法是什么(我不是要求初始化!)(参见下面的代码)
string a;
// some code here.......
if(a == string.Empty)
Run Code Online (Sandbox Code Playgroud)
要么
if(string.IsNullOrEmpty(a))
Run Code Online (Sandbox Code Playgroud)
要么
if(a == "")
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.:)
我有这个字符串:"123-456-7"
我需要得到这个字符串:"1234567"
如何用空字符串替换" - "的出现?
我有人建议我避免反复打电话String.Length,因为每次打电话都会重新计算.我原以为String.Length在O(1)时间跑了.是String.Length比这更复杂?