作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
如何在 C# 中不使用 switch 或 if 语句来处理枚举?
例如
enum Pricemethod
{
Max,
Min,
Average
}
...我有一篇文章
public class Article
{
private List<Double> _pricehistorie;
public List<Double> Pricehistorie
{
get { return _pricehistorie; }
set { _pricehistorie = value; }
}
public Pricemethod Pricemethod { get; set; }
public double Price
{
get {
switch (Pricemethod)
{
case Pricemethod.Average: return Average();
case Pricemethod.Max: return Max();
case Pricemethod.Min: return Min();
}
}
}
}
我想避免 switch 语句并使其通用。
对于特定的价格方法调用特定的计算并返回它。
get { return CalculatedPrice(Pricemethod); }
Wich 模式将在这里使用,也许有人有一个很好的实现想法。已经搜索了状态模式,但我认为这不是正确的模式。
最佳答案
how do I handle enums without using
switch
orif
statements in C#?
你不知道。枚举只是编写 const int
的一种令人愉快的语法。
考虑这种模式:
public abstract class PriceMethod
{
// Prevent inheritance from outside.
private PriceMethod() {}
public abstract decimal Invoke(IEnumerable<decimal> sequence);
public static PriceMethod Max = new MaxMethod();
private sealed class MaxMethod : PriceMethod
{
public override decimal Invoke(IEnumerable<decimal> sequence)
{
return sequence.Max();
}
}
// etc,
}
现在你可以说
public decimal Price
{
get { return PriceMethod.Invoke(this.PriceHistory); }
}
用户可以说
myArticle.PriceMethod = PriceMethod.Max;
decimal price = myArticle.Price;
关于c# - 用于状态处理的多态枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19524377/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!