String.Empty还是null:从服务中返回"Error"字段,哪个更好?

3
我们都知道(或多或少)String.Empty和null之间的区别。在“通常”的开发中(我指的是ASP.NET应用程序、WinForms应用程序——所有的C#.NET代码),我仍然没有决定对我来说哪个更好,但我看到并阅读了很多关于这方面的文章。
但我没有看到比较,在从服务(ASP.NET WebService或WCF服务)返回字符串值时使用哪一个更好。
您建议我返回null还是String.Empty:
1.当我需要返回“错误”消息时(null或空表示“没有错误”);
2.当我需要返回“电子邮件”字段值时(null或空表示“未指定电子邮件”)。
欢迎任何想法。
5个回答

4

这完全是一种品味、风格和一致性的问题。您是否已经有其他返回null / empty的服务?如果有,最好与它们匹配。否则,在我个人看来,null比empty更好。因为null可以作为更好的哨兵值。空字符串可能会被视为发生了错误,但没有返回错误详情。


这是一个很好的观点:空字符串可能被视为发生了错误,但没有返回错误详情。谢谢。 - Budda

1
通常我会选择与代码处理此情况的方式更一致的返回值。你所描述的情况肯定可以采取任何一种方式;在我看来,当没有错误时返回 null 的错误消息更有意义,而电子邮件作为空字符串更有意义(因为未输入/指定电子邮件)。

0

在编程中,始终返回string.Empty而不是null

这样,使用服务方法的代码就不必担心如果调用由您的服务返回的字符串上的操作会出现NullReferenceException

反复进行空值检查会使您的代码看起来丑陋且难以阅读。


2
防御性编程建议您无论如何都要检查返回值是否为null。 - cjk
在某种程度上,我同意您的看法,但我的观点是:在调用实例方法之前,他们应该检查实例是否为'非null'...虽然,对于这种情况有一个特殊的模式'DefaultObject'。 - Budda

0

在纯请求表单中,NULL和string.empty的表示方式相同。区别在于XSD映射,即是否设置nillable="true"。

更好的请求可能是返回一个“无效”结果,这样就不会被任何第三方服务消费者误解了。


0

从概念上讲,Null 表示未定义的值。就这个参数而言,假设您有一个指示用户是否拥有电子邮件地址的标志。如果未设置此标志,则 Null 将是电子邮件地址的适当值。如果设置了该标志,则空字符串将表示未提供电子邮件地址。

对于错误消息,我再次会说 Null 表示未定义,例如没有错误可报告。空字符串可能表示发生了错误,但由于某种原因未提供详细信息。

只要在您的服务中保持一致,两者都可以接受。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接