gpt4 book ai didi

c# - 通过在 C# 中传递 null 的选项将枚举传递给函数的简洁方法

转载 作者:太空宇宙 更新时间:2023-11-03 17:11:43 25 4
gpt4 key购买 nike

我有一个代表物理结构的对象(如电线杆),它接触到一堆其他对象(电线杆上的电线)。其他对象具有一系列以枚举形式表示的特征(状态、大小、电压、相位等)。我想编写一个通用函数来计算有多少电线匹配任何或所有特征。

如果枚举是一等对象,我想我会这样写:

class Wire
{
public EStatus Status { get; set; }
public ESize Size { get; set; }
public EVoltage Voltage { get; set; }
public EPhase Phase { get; set; }
}

int CountWires(EStatus status, ESize size, EVoltage voltage, EPhase phase)
{
int count = 0;
foreach (Wire wire in _connectedWires)
{
if (status != null && wire.Status != status) continue;
if (size != null && wire.Size != size) continue;
//...
++count;
}
return count;
}

... 并且能够像这样调用它来计算任何电压和相位的新的大电线:

CountWires(EStatus.New, ESize.Large, null, null);

... 但当然这让我得到一个 cannot convert from '<null>' to 'EVoltage'错误。

我们过去通过向枚举本身添加一个“Any”值并对其进行检查来解决这个问题,但是如果我们做一些事情,比如在列表中为用户显示所有可能的值,我们必须过滤掉“任何”。所以我想避免这种情况。

我想我会把它扔给社区,看看是否有人有任何想法可以通过干净的界面和易于阅读的调用代码来实现这一点。我有自己的答案,我正在考虑,我会添加到讨论中。

最佳答案

或者只使用可空类型。

int CountWires(EStatus? status, ESize? size, EVoltage? voltage, EPhase? phase)
{
int count = 0;
foreach (Wire wire in _connectedWires)
{
if (status.HasValue && wire.Status != status.Value) continue;
if (size.HasValue && wire.Size != size.Value) continue;
...
++count;
}
return count;
}

关于c# - 通过在 C# 中传递 null 的选项将枚举传递给函数的简洁方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2290275/

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