【发布时间】:2017-02-28 09:46:46
【问题描述】:
在C#中工作,想减少if else系列,实体有两个属性FromServiceID和ToServiceID,假设我的ServiceClass实例有波纹管信息。如何清理波纹管代码?任何类型的建议都可以接受。
entity= new ServiceClass();
entity.FromServiceID=3
entity.ToServiceID=1
if (entity.FromServiceID == 1)
{
entity.1KWithdrawal();
}
else if (entity.FromServiceID == 2)
{
entity.10KWithdrawal();
}
else if (entity.FromServiceID == 3)
{
entity.BTWithdrawal();
}
if (entity.ToServiceID == 1)
{
entity.1KDeposit();
}
else if (entity.ToServiceID == 2)
{
entity.10KDeposit();
}
else if (entity.ToServiceID == 3)
{
entity.BTDeposit();
}
public class ServiceClass
{
public int FromServiceID { get; set; }
public int ToServiceID { get; set; }
public void 1KWithdrawal()
{ Console.WriteLine("One_KWithdrawal"); }
public void 10KWithdrawal()
{ Console.WriteLine("Ten_KWithdrawal"); }
public void BTWithdrawal()
{ Console.WriteLine("BTWithdrawal"); }
public void 1KDeposit()
{ Console.WriteLine("One_KDeposit"); }
public void 10KDeposit()
{ Console.WriteLine("Ten_KDeposit"); }
public void BTDeposit()
{ Console.WriteLine("Ten_KDeposit"); }
}
【问题讨论】:
-
改用
switch ... case ... -
那是伪代码吗?您正在初始化对象,但没有将实例分配给变量,因此它们已准备好在初始化后立即被垃圾回收。
-
类名什么时候可以以数字开头?
-
如果我们不知道这个类的用途和这些方法的作用,我们将无能为力。它太抽象而无法提供真正的改进。通常我建议将逻辑封装在
ServiceClass中。所以实现一个方法Process(或其他),它根据属性的值调用方法。那么你只需要entity.Process(); -
标识符(如方法名或类型名)不能以数字开头,所以
1KWithdrawal();不能是真实代码。
标签: c# coding-style