C# String.Empty或null:返回什么更好;“错误”;现场服务?

C# String.Empty或null:返回什么更好;“错误”;现场服务?,c#,.net,string,C#,.net,String,我们都知道(或多或少)String.Empty和null之间的区别。我仍然没有决定在“常规”开发(我指的是ASP.NET应用程序的服务器端部分的开发,WinForms应用程序-一切都是C#.NET代码)中什么对我更有利,但我看到并阅读了很多关于这方面的文章 但是,我没有看到当您从服务(ASP.NET WebService或WCF服务)返回字符串值时,使用什么更好 您建议我返回null或String。空: 当我需要返回“Error”消息时(null或empty表示“没有错误”) 当我需要返回“电子

我们都知道(或多或少)String.Empty和null之间的区别。我仍然没有决定在“常规”开发(我指的是ASP.NET应用程序的服务器端部分的开发,WinForms应用程序-一切都是C#.NET代码)中什么对我更有利,但我看到并阅读了很多关于这方面的文章

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

您建议我返回null或String。空:

  • 当我需要返回“Error”消息时(null或empty表示“没有错误”)
  • 当我需要返回“电子邮件”字段值时(null或空表示“未指定电子邮件”)

  • 欢迎任何想法。

    这都是品味、风格和一致性的问题。您是否已经有其他返回null/empty的服务?如果是这样的话,最好匹配它们。否则在我个人看来空总比空好。As null是一个更好的哨兵值。空字符串可能被视为发生了错误,但未返回任何错误详细信息。

    始终返回
    string。空的
    而不是
    null

    然后,如果使用服务方法的代码调用对服务返回的字符串的操作,则不必担心
    NullReferenceException


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

    null和string.empty在纯请求表单中的表示方式相同。区别在于XSD映射是否设置为nillable=“true”


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

    通常,我会使用与代码其余部分处理这种情况的方式更一致的返回值。你所描述的案例肯定会走向任何一个方向;在我看来,当不存在错误时返回null的错误消息更有意义,而电子邮件作为空字符串(因为没有输入/指定电子邮件)更有意义。

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

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


    不过,只要您在服务中保持一致,两者都可以。

    这是一个很好的观点:空字符串可能被视为发生了错误,但没有返回错误详细信息。ThanksDefensive编码建议您检查返回值是否为null。在某种程度上同意您的观点,但我的观点是另一个:在调用实例的方法之前,他们应该检查实例“if it not null”。。。不过,对于这种情况,有一种特殊的模式“DefaultObject”