我正在尝试匹配对结构中字段的引用,但我不确定如何将其作为案例设置而不是 if 语句来执行。
这是我对 if 语句所做的一般想法:
public struct Test
{
// MyObject is a class
public MyObject A;
public MyObject B;
public MyObject C;
public bool Distance(MyObject obj, out float distance){
distance = float.PositiveInfinity;
if(A == obj){
distance = DistanceFrom(A);
return true;
}
if(B == obj){
distance = DistanceFrom(B);
return true;
}
if(C == obj){
distance = DistanceFrom(C);
return true;
}
//object does not relate to this struct so return false
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
我的实际结构中有超过 3 个(总共 24 个),但我想知道如何通过 case 语句进行比较,因为它比许多 if 语句要干净得多。另外,我不希望使用 24 个引用的列表,因此使用一个简单的 for 循环来运行它,因为我最终会将结构分配到堆。
是否可以进行比较参考的切换?我知道如何按对象类型进行比较,但如果它们引用完全相同的对象,则不知道。或者 if 语句是我唯一的选择吗?
虽然我同意评论者的观点,即您可能存在设计问题,但您可以使用when带有switch.
public bool Distance(object obj, out float distance)
{
switch (obj)
{
case var _ when ReferenceEquals(obj, A):
distance = DistanceFrom(A);
return true;
case var _ when ReferenceEquals(obj, B):
distance = DistanceFrom(B);
return true;
case var _ when ReferenceEquals(obj, C):
distance = DistanceFrom(C);
return true;
default:
distance = float.PositiveInfinity;
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
我知道它看起来有点奇怪,但var _是一个丢弃,表示您不关心obj( 至少其case本身的价值,但您仍然可以obj在when.
您说过您想比较参考文献。就是这样ReferenceEquals。如果您不想这样,您可以使用==或任何您认为平等的方式。
| 归档时间: |
|
| 查看次数: |
1222 次 |
| 最近记录: |