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)
题:
对标题问题:允许显式运算符抛出(而隐式运算符不应该抛出).
但是,这是否null是一个有效的理由是一个设计决定,我想不会.
考虑:
object x = null;
string t = (string)x;
Run Code Online (Sandbox Code Playgroud)
这也不能丢.
| 归档时间: |
|
| 查看次数: |
836 次 |
| 最近记录: |