【发布时间】:2021-06-25 01:09:54
【问题描述】:
我正在尝试匹配对结构中字段的引用,但我不确定如何将其作为案例设置而不是 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;
}
}
在我的实际结构中有超过 3 个(总共 24 个),但我想知道如何通过 case 语句来进行比较,因为它比许多 if 语句要干净得多。另外,我不希望使用我的 24 个引用的列表,因此不希望使用简单的 for 循环来运行它,因为我最终会将我的结构分配给堆。
是否可以切换比较参考?我知道如何按对象类型进行比较,但如果它们引用完全相同的对象则不知道。还是 if 语句是我唯一的选择?
【问题讨论】:
-
这似乎是一个设计问题。这是你的真实代码吗?
-
看起来你可以像
if(A == obj || B == obj || C == obj)那样做一个if。 -
这不是我的真实代码,因为我的实际代码大约有 300 行,没有上下文就更难理解我的目标是什么,它做了很多事情,所以我做了一个简化的例子。但是我确实有很多 if 语句检查对象是否是属于结构的对象之一。我认为 case 语句会更容易编写和更优化。
-
使用集合的解决方案可能更好。
-
整个“栈堆”和“不想使用集合”的逻辑可能有缺陷。
标签: c#