关于C#:string.empty或null:从服务返回”错误”字段有什么更好的方法?

String.Empty or null: what is better to return for “Error” field from service?

我们都知道(或多或少)string.empty和null之间的区别。在"常规"开发中,我仍然没有决定什么对我更好(我的意思是ASP.NET应用程序的服务器端部分的开发,WinForms应用程序——所有C.NET代码的开发),但是我看到并阅读了很多相关的文章。

但我没有看到比较,当您从服务(ASP.NET WebService或WCF服务)返回字符串值时,最好使用什么。

您建议我返回空值或字符串。空:

  • 当我需要返回"错误"消息时(空或空将表示"没有错误");
  • 当我需要返回"email"字段值时(空或空将表示未指定"email")。
  • 任何想法都是受欢迎的。


    这是一个关于品位、风格和一致性的问题。您是否有其他已返回空/空的服务?如果是这样的话,最好与他们匹配。否则在我个人看来,空的总比空的好。因为空值用作更好的sentinel值。可以将空字符串视为发生了错误,但未返回错误详细信息。


    一般来说,我会使用与您的其余代码处理这种情况的方式更一致的返回值。您所描述的情况当然可以这样做;在我看来,当没有错误时返回空值的错误消息更有意义,而电子邮件作为空字符串更有意义(因为没有输入/指定电子邮件)。


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

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

    但是,只要您在服务中保持一致,任何一个都应该是好的。


    null和string.empty在纯请求表单中的表示方式相同。区别在于XSD映射在设置nillable="true"或不设置nillable="true"方面。

    更好的请求可能是返回一个"无效"的结果,这样您的服务的任何第三方消费者都不会误解它。


    始终返回string.Empty,而不是null

    那么,如果使用service方法的代码对服务返回的字符串调用操作,那么它们就不必担心NullReferenceException

    重复的空检查会使代码看起来很难看,很难读取。