我试图为or运算符提出一个速记解决方案。所以我想出了类似的东西,但是结果总是错误的。
有人可以提供一些有关如何解决此问题的建议吗?这会完全起作用吗?如果没有,还有其他类似的解决方案吗?
附言:我知道这个问题曾被问过,但不幸的是,没有一种解决方案适合我的需求。
编码:
public static bool IsEqualsTo(object o, params object[] p)
{
for (int i = 0; i < p.Length; i++)
{
if (o == p[i])
{ return true; }
}
return false;
}
因此,例如:
从 if(MovementState == PMovementState.Walking || MovementState == PMovementState.Idle)开始
到 if(IsEqualsTo(MovementState,PMovementState.Walking,PMovementState.Idle))
要么
从 if(输入文本==“文本” ||输入文本==“文本2” ||输入文本==“文本3”)
到 if(IsEqualsTo(input.text,“ text”,“ text2”,“ text3”))
您可以使用通用版本来避免装箱/拆箱:
public static bool IsEqualsTo<T>(T o, params T[] p)
{
var comparer = EqualityComparer<T>.Default; // make it an optional parameter
for (int i = 0; i < p.Length; i++)
{
if (comparer.Equals(o, p[i]))
return true;
}
return false;
}
出现此问题的原因是,Object
如果传递了诸如enum(struct)之类的值类型,则该参数将被装箱。这将导致==
返回,false
因为它不是相同的引用。Equals
如上所示使用可以解决此问题,并使用泛型使其更有效。
如前所述,您还可以使用LINQ缩短方法的主体:
return p.Contains(o, comparer);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句