首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#:根据值切换返回值类型

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

Stack Overflow用户
提问于 2017-05-18 13:33:06
回答 2查看 112关注 0票数 1

我需要一个建议,拜托。情况如下:

我有一个图书馆,用来操作一些硬件。机器的一个参数是Quant (一个包中应该有多少个产品)。它可分为三种类型:

代码语言:javascript
复制
*quant type | value type*
 Weight     | double
 Pieces     | Integer
 Without    | null

我可以创建一个存储Quant值的结构,例如:

代码语言:javascript
复制
public struct Quant
{
    public QuantTypes QuantType { get; set; }
    public double QuantWeightValue { get; set; }
    public int QuantPieceValue { get; set; }
    ...
}

但是在工作过程中,我需要多次检查量化的状态和值。这变得很困难,因为我需要依靠quantType获得价值

代码语言:javascript
复制
if(QuantType == QuantTypes.Piece)
{
     if(QuantWeightValue > 5)
          QuantWeightValue += 2.5;
}
else
{     
     if(QuantPieceValue > 5)
          QuantPieceValue  += 2;
}
SetNewQuantToMachine();

我不喜欢它。我只能为双类型的量化值创建一个字段。但这样就有可能用非整数值来设置块类型的量化。在这种情况下,我看到两个解决方案:

  1. 在设定过程中手动环绕值;
  2. 如果有人试图设置非整数段量化,则抛出异常;

也许有人会给我一个建议,什么是最好的做法来写这样的代码。也许GenericTypes在这种情况下是合适的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-18 13:43:27

为Quant的每个子类型创建单独的类。提供一个采用IQuant接口的方法,并使用dynamic向特定类型的覆盖调度。

代码语言:javascript
复制
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; }
}

您的公共方法如下所示:

代码语言:javascript
复制
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
}
票数 3
EN

Stack Overflow用户

发布于 2017-05-18 13:43:45

如果我搞错了很抱歉。但我可以建议将"Quant“改为类安装基版本,然后使用不同的变量创建继承的类数,然后只使用"quant.GetValue()”之类的内容。说得通吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44049235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档