假设我有一个类似这样的类,可以计算不同交通工具在不同距离下的旅行成本:
public class TransportationCostCalculator
{
public double DistanceToDestination { get; set; }
public decimal CostOfTravel(string transportMethod)
{
switch (transportMethod)
{
case "Bicycle":
return (decimal)(DistanceToDestination * 1);
case "Bus":
return (decimal)(DistanceToDestination * 2);
case "Car":
return (decimal)(DistanceToDestination * 3);
default:
throw new ArgumentOutOfRangeException();
}
}
这很好,但是从维护角度来看,switch案例可能会成为一场噩梦。如果我将来想要使用飞机或火车怎么办?那么我必须更改上面的类。有什么替代switch案例可以在这里使用,并有任何提示吗?我想象在像这样的控制台应用程序中使用它,该应用程序将从命令行运行,其中包含所需的交通工具类型和您要旅行的距离的参数:
class Program
{
static void Main(string[] args)
{
if(args.Length < 2)
{
Console.WriteLine("Not enough arguments to run this program");
Console.ReadLine();
}
else
{
var transportMethod = args[0];
var distance = args[1];
var calculator = new TransportCostCalculator { DistanceToDestination = double.Parse(distance) };
var result = calculator.CostOfTravel(transportMethod);
Console.WriteLine(result);
Console.ReadLine();
}
}
}
非常感谢任何提示!
Dictionary
的答案看起来不错,但请注意它们将异常点与传输定义点分离。您的switch会在那里抛出ArgumentOutOfRangeException
,显然缺少“airplane”-- 您甚至可以在异常消息中提供该信息...(并不是说您或任何答案都是错误的。只是从不同的角度看待它。) - DevSolar