gpt4 book ai didi

c# - 用于状态处理的多态枚举

转载 作者:太空狗 更新时间:2023-10-29 20:54:42 25 4
gpt4 key购买 nike

如何在 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 or if 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com