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

Her*_*des 4 .net c# casting operators

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

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

   return role;
}
Run Code Online (Sandbox Code Playgroud)

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

user.Role = (DomainModel.Role)_userRepository.GetRole(user); // Would normally results in a NullReferenceException
Run Code Online (Sandbox Code Playgroud)

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

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;
}
Run Code Online (Sandbox Code Playgroud)

题:

  • 创建这样的显式运算符是否合乎逻辑?

Hen*_*man 5

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

但是,这是否null是一个有效的理由是一个设计决定,我想不会.

考虑:

object x = null;
string t = (string)x;
Run Code Online (Sandbox Code Playgroud)

这也不能丢.