我有一个代表物理结构的物体(如电线杆),它接触一堆其他物体(杆子上的电线).其他对象具有表示为枚举的一组特征(状态,大小,电压,相位等).我想编写一个通用函数来计算有多少线匹配任何或所有特征.
如果枚举是一流的对象,我想我只是写这个:
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;
}
Run Code Online (Sandbox Code Playgroud)
......并且可以将其称为计算任何电压和相位的新的大电线,如下所示:
CountWires(EStatus.New, ESize.Large, null, null);
Run Code Online (Sandbox Code Playgroud)
...但当然这让我cannot convert from '<null>' to 'EVoltage'
错了.
我们过去通过向枚举本身添加"任意"值并对其进行检查来解决这个问题,但是如果我们执行类似显示用户列表中所有可能值的操作,我们必须过滤掉"任意" .所以我想避免这种情况.
我以为我会把它扔给社区,看看是否有人有任何想法,通过一个干净的界面和易于阅读的调用代码来做到这一点.我有自己的答案,我将加入讨论.
Rob*_*vis 10
或者只使用可空类型.
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;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1166 次 |
最近记录: |