我的同事是C#的新手,并不了解合并运营商。所以,我看到他写了一行代码:

string foo = "" + str;

这个想法是,如果str为null,则此表达式将返回一个空字符串。当然,这可以改写为:

string foo = str ?? "";

我觉得这会更具可读性。但这真的是一件大事吗?可读性的好处是否足以建议返回并使这些线看起来像第二个?或者这是我应该学会放手的事情之一(前提是我的同事接受了将来最佳方式的教育)?

编辑:请注意,我很欣赏效率评论,但这并没有真正用于任何性能至关重要的情况。因此,虽然这些信息很有趣,但并不一定是我认为重要的信息。

有帮助吗?

解决方案

IMO,明确定义这样的逻辑要好得多,即不使用字符串连接来避免空字符串并使用条件语句或??操作

关于其他意见:

  

还有一个性能优势   使用null-coalescing运算符,   因为不需要连接   (因此,没有额外的字符串   正在创建实例   不必要地)

不正确。 C#编译器编译“"” + string2到100%与string1相同的代码? "&QUOT ;.此外,C#编译器转换+运算符以调用string.Concat方法,该方法依次使用string.IsNullOrEmpty函数检查参数,并且在这种情况下不分配新字符串。

  

我还建议使用   String.Empty over“"因为它是一个   不变,不需要   创建一个新的字符串

.NET framework支持字符串实习,因此“"和string.Empty指向相同的内存区域

其他提示

我不认为一个人比另一个人更可读。我更喜欢这个:

string foo = str ?? "";

因为我真的很喜欢?操作

如果你是一个全新的品牌,我认为这会更容易理解:

string foo = str == null ? "" : str;

string foo = "";
if (str != null) foo = str;

然而,你需要问问自己,“你真的想要多么简单?”

虽然从技术角度来看我更喜欢第二行,但第一行实际上对我来说更具可读性......

第二行对我来说看起来更具可读性,它明确了右侧表达的意图。

我更喜欢你的第二个例子,因为它更主动地反对 str 为空并且更具表现力。 我还建议在"" 上使用 String.Empty ,因为它是一个常量,不需要创建新的字符串(是的,这是一个极端的挑剔,但重要的是要注意)。

我会使用coalesce运算符或 foo = str == null? "" :str; 有两个原因:

  1. 第一个示例在其他大括号语言(特别是Java和JavaScript)中没有相同的行为,其中对空字符串附加空引用会产生包含文本 null <的字符串。因此,第一个示例需要更多的心理努力,以确保它将导致正在编写的语言中的正确行为。即使给出其他线索,它也是C#(例如小写类型 string ),任何需要开发人员减速并思考“此代码的意图是什么”的东西。导致生产力下降。从语言转向语言时,它也可能会引入错误。

  2. 第二个示例更清楚地表达了代码的 intent ,原始问题中描述的是:

    当str为null时将foo设置为空字符串

    与第一个例子相反,可以理解为:

    将foo设置为附加了str的空字符串(当str为null时,可能会产生将foo设置为空字符串的副作用)

  3. 作为程序员,我们应该尝试表达代码的 intent ,而不是依赖其他操作的副作用来为我们提供我们想要的结果。

这是一篇关于string.empty vs&quot;&quot;

的文章

http://blogs.msdn.com/brada /archive/2003/04/22/49997.aspx

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top