c# - 在 c# 类中使用 null 或 Empty 单例?
问题描述
我经常偶然发现具有空属性的类来表示未知或以某种方式丢失的值。为什么不使用 null 代替?有一个空类的单例有什么好的实际理由吗?或者考虑到在这种情况下我们可以使用可为空的属性的结构。
澄清:我的意思不是我是否应该使用现有的 Empty-like-properties 或 null ,而是是否/何时应该为我自己实现的新类添加 Empty-properties。
更新:
我想我只是将编码的各个方面与域建模混淆了。显然,是否将某些类似 Empty 的值视为不可接受取决于每个域,例如空字符串、空数组、0、Guid.Empty 等。
如果基础值类型的状态对于我的类所代表的概念无效,那么我可以添加 Empty、Undefined 或类似的无效基础值来表示此状态。但除了这种情况,我想不出添加空属性而不是仅使用 null 的原因。
解决方案
当您需要表示底层类型的未定义值时,您可以使用可为空的类型。一个
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/
希望这可以帮助!
推荐阅读
- wcf - System.Security.Cryptography.CryptographicException:使用配置的 WCF 客户端证书身份验证指定的提供程序类型无效
- c# - 如果它们以任何方式交叉,则比较两个 DateTime .TimeOfDay。ASP C#
- sqlalchemy - SQLAlchemy:根据列值有条件地在表中创建关系
- .htaccess - 如何在不禁止访问其文件的情况下使用 htaccess 禁用对文件夹的访问?
- javascript - 在 Javascript 中解析 Promise 数组
- linux - 将系统上所有 git 存储库的远程从 http 更改为 ssh
- java - Android Volley 为什么 JsonObjectRequest 不调用 onResponse
- powerbi - Power BI 中的条件转换数据
- javascript - 通过 viewBox 操作 svg
- docker - Docker-compose:从第三个容器中嗅探两个容器之间的包