c# - 显式运算符应该在 C# 中返回 null 吗?

标签 c# .net casting operators

我正在编写一些显式运算符来将数据库模型类型转换为我的领域模型。像这样(简化示例):

public static explicit operator DomainModel.Role(Role roleEntity)
{
   DomainModel.Role role = new DomainModel.Role
   {
      RoleId = roleEntity.RoleId,
      Name = roleEntity.Name
   };

   return role;
}

但是,roleEntity 参数可能为空。大多数情况下,在 .net Framework 中显式转换 null 实例会导致异常。像这样:

user.Role = (DomainModel.Role)_userRepository.GetRole(user); // Would normally results in a NullReferenceException

但是如果显式运算符被调整,上面的将按预期运行:

public static explicit operator DomainModel.Role(Role roleEntity)
{
   DomainModel.Role role = roleEntity == null ? null : new DomainModel.Role
   {
      RoleId = roleEntity.RoleId,
      Name = roleEntity.Name
   };

   return role;
}

问题:

  • 创建这样明确的运算符合乎逻辑吗?

最佳答案

对于标题问题:允许显式运算符抛出(而隐式运算符不应该)。

但是 null 是否是这样做的正当理由是一个设计决定,我认为不是。

考虑:

object x = null;
string t = (string)x;

不会抛出。

关于c# - 显式运算符应该在 C# 中返回 null 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6910630/

相关文章:

c# - 删除 WinForms 中的 SplitContainer 面板填充

c# - AppDomain.CreateInstance

c# - 在构建 .NET 4.0 项目时自动构建 .NET 4.5 项目?它不需要被引用

java - 扩大/缩小转换的实际应用?

ios - Swift,如果让..作为?一些字符串

c# - 使用 SharpSsh 在 ssh 中发送类似 Ctrl+A 的 key

c# - 在 C# UWP 应用程序中的何处粘贴 API 调用

javascript - 如果我在模型中传递 Base 64 编码图像,则传递到 Web api 的模型为 null

c# - 尝试使用 C# 运行命令

java - `(long)(float)Long.MAX_VALUE` 具有准确的值,这怎么可能?