gpt4 book ai didi

C#:根据值切换返回值类型

转载 作者:太空宇宙 更新时间:2023-11-03 22:58:58 26 4
gpt4 key购买 nike

请给我一个建议。情况如下:

我有一个用于操作某些硬件的库。机器的参数之一是 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 获得值(value)

if(QuantType == QuantTypes.Piece)
{
if(QuantWeightValue > 5)
QuantWeightValue += 2.5;
}
else
{
if(QuantPieceValue > 5)
QuantPieceValue += 2;
}
SetNewQuantToMachine();

我不喜欢。我只能为 double 类型的 quant 值创建一个字段。但是这种方式打开了使用非整数值设置 piece 类型 quant 的可能性。在这种情况下,我看到了两种解决方案:

  1. 设置时手动取整;

  2. 如果有人尝试设置非整数 piece quant 则抛出异常;

也许有人会给我建议什么是编写这样的代码的最佳实践。也许 GenericTypes 适合这种情况?

最佳答案

为 Quant 的每个子类型创建单独的类。提供一个采用IQuant 接口(interface)的方法,并使用dynamic 分派(dispatch)到特定类型的覆盖:

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)方法将如下所示:

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
}

关于C#:根据值切换返回值类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44049235/

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