首页 > 解决方案 > 在 c# 类中使用 null 或 Empty 单例?

问题描述

我经常偶然发现具有空属性的类来表示未知或以某种方式丢失的值。为什么不使用 null 代替?有一个空类的单例有什么好的实际理由吗?或者考虑到在这种情况下我们可以使用可为空的属性的结构。

澄清:我的意思不是我是否应该使用现有的 Empty-like-properties 或 null ,而是是否/何时应该为我自己实现的新类添加 Empty-properties。

更新:

我想我只是将编码的各个方面与域建模混淆了。显然,是否将某些类似 Empty 的值视为不可接受取决于每个域,例如空字符串、空数组、0、Guid.Empty 等。

如果基础值类型的状态对于我的类所代表的概念无效,那么我可以添加 Empty、Undefined 或类似的无效基础值来表示此状态。但除了这种情况,我想不出添加空属性而不是仅使用 null 的原因。

标签: c#oopnull

解决方案


当您需要表示底层类型的未定义值时,您可以使用可为空的类型。一个Boolean变量只能有两个值:真和假。没有“未定义”的值。在许多编程应用程序中,尤其是数据库交互中,变量值可能未定义或丢失。例如,数据库中的字段可能包含值 true 或 false,或者它可能根本不包含值。在这种情况下,您使用一种Nullable<bool>类型。

当您的应用程序与您非常有限或完全无法控制的第三方数据库/服务进行通信时,可空类型可能最有用。

让我们假设您的应用程序之一处理不同的来源。您必须将源值分配给具有属性的类Reference Types (string, class, list etc.)之一Value Types (int, double, bool etc)

您无法控制应用程序中接收到的值。虽然Reference Types会优雅地处理任何空值,但Value Types会抛出运行时异常。这是 Nullable 类型将为您节省一天的地方。一旦将值分配给您的类属性,您就可以按照您想要的方式自由地处理它们。

您可以在此处获取有关此主题的更多信息:https ://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/nullable-types/

希望这可以帮助!


推荐阅读