c# – .Net 4.0优化代码,用于重构现有的“if”条件和“is”运算
发布时间:2020-12-15 19:38:51 所属栏目:百科 来源:网络整理
导读:我有以下C#代码.它工作正常;但是使用 is operator,GetDestination()方法会被多个if条件混乱. 在.Net 4.0(或更高版本)中,避免这些“if”条件的最佳方法是什么? 编辑:角色是业务模型的一部分,目标纯粹是使用该业务模型的一个特定应用程序的工件. 码 public c
我有以下C#代码.它工作正常;但是使用
is operator,GetDestination()方法会被多个if条件混乱.
在.Net 4.0(或更高版本)中,避免这些“if”条件的最佳方法是什么? 编辑:角色是业务模型的一部分,目标纯粹是使用该业务模型的一个特定应用程序的工件. 码 public class Role { } public class Manager : Role { } public class Accountant : Role { } public class Attender : Role { } public class Cleaner : Role { } public class Security : Role { } class Program { static string GetDestination(Role x) { string destination = @"Home"; if (x is Manager) { destination = @"ManagerHomeA"; } if (x is Accountant) { destination = @"AccountantHomeC"; } if (x is Cleaner) { destination = @"Cleaner"; } return destination; } static void Main(string[] args) { string destination = GetDestination(new Accountant()); Console.WriteLine(destination); Console.ReadLine(); } } 参考 > Dictionary<T,Delegate> with Delegates of different types: Cleaner,non string method names? 解决方法
拥有将在派生类中重写的虚拟属性应该可以解决问题:
class Role { public virtual string Destination { get { return "Home"; } } } class Manager : Role { public override string Destination { get { return "ManagerHome;"; } } } class Accountant : Role { public override string Destination { get { return "AccountantHome;"; } } } class Attender : Role { public override string Destination { get { return "AttenderHome;"; } } } class Cleaner : Role { public override string Destination { get { return "CleanerHome;"; } } } class Security : Role { } 我没有使属性抽象,在派生类中没有覆盖时提供默认的Home值. 用法: string destination = (new Accountant()).Destination; Console.WriteLine(destination); Console.ReadLine(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |