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