我需要一个建议。情况如下:
我有一个用于操作某些硬件的库。该机器的一个参数是Quant(一个包装中应该有多少产品)。它可以有三种类型:
*quant type | value type*
Weight | double
Pieces | Integer
Without | null
我可以创建一个用于存储Quant值的结构,例如:
public struct Quant
{
public QuantTypes QuantType { get; set; }
public double QuantWeightValue { get; set; }
public int QuantPieceValue { get; set; }
...
}
但在工作过程中,我需要多次检查quant的状态和值。而且变得困难,因为我需要根据quantType获得价值
if(QuantType == QuantTypes.Piece)
{
if(QuantWeightValue > 5)
QuantWeightValue += 2.5;
}
else
{
if(QuantPieceValue > 5)
QuantPieceValue += 2;
}
SetNewQuantToMachine();
我不喜欢它。我只能为double类型的量值制作一个字段。但是这种方式可以设置具有非整数值的片段类型的定量。在这种情况下,我看到两个解决方案:
在设置期间手动舍入值;
如果有人试图设置非整数片段量数,则抛出异常;
也许有人会给我一个建议,编写这样的代码是最佳做法。也许GenericTypes适合这种情况?
答案 0 :(得分:3)
为Quant的每个子类型创建单独的类。提供一个方法,该方法使用IQuant
接口,并使用dynamic
调度到特定于类型的覆盖:
interface IQuant {
QuantTypes QuantType { get; }
}
class QuantWeight {
public QuantTypes QuantType {
get { return QuantTypes.Weight; }
}
public double QuantWeightValue { get; }
}
class QuantCount {
public QuantTypes QuantType {
get { return QuantTypes.Pieces; }
}
public int PiecesValue { get; }
}
您的公开方法如下所示:
public void ProcessQuant(IQuant quant) {
ProcessQuantImpl((dynamic)quant);
}
private void ProcessQuantImpl(QuantWeight weight) {
... // Do the real work here
}
private void ProcessQuantImpl(QuantCount pieces) {
... // Do the real work here
}
答案 1 :(得分:0)
抱歉,如果我弄错了。但我可以建议改变" Quant"使用所有计算来设置基本版本,然后创建具有不同变量的继承类的数量,然后使用类似" quant.GetValue()"的内容。它有意义吗?