我有一个名为User的基类.
我有两个来自User的派生类,叫做DerivedUser,OtherDerivedUser
我有以下代码:
User user = newUser.CreateUserByType();
SendNewUser(user);
Run Code Online (Sandbox Code Playgroud)
我不想执行if或switch语句,然后对派生类型执行向下转换.
我只想用一行语句执行调用.
SendNewUser(user);
Run Code Online (Sandbox Code Playgroud)
我想要**带有单线*的干净代码.
根据类型的这种方法将"知道"动态调用哪个方法.
我有两个名为SendNewUser的函数,它们被派生类型重载.
有没有办法通过向下转换到正确的派生类来调用正确的函数(我不想显式转换)
private static void SendNewUser(DerivedUser user){
...
}
private static void SendNewUser(OtherDerivedUser user){
...
}
Run Code Online (Sandbox Code Playgroud)
是的,使用 C# 7 中的模式匹配:
switch (user)
{
case DerivedUser u:
SendNewUser(u);
break;
case OtherDerivedUser u:
SendNewUser(u);
break;
default:
throw new InvalidOperationException("Where did that come from?");
}
Run Code Online (Sandbox Code Playgroud)
您也可以使用模式匹配if,尽管在这种情况下它不会提高可读性:
if (user is DerivedUser u) {
SendNewUser(u);
}
else if (user is OtherDerivedUser u) {
SendNewUser(u);
}
else {
throw new InvalidOperationException("Where did that come from?");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |