或运算符问题的可能速记解决方案

未知用户

我试图为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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Leetcode单数II运算符解决方案说明

了解无需使用乘法运算符即可实现square()的解决方案

JAVA - 如何在此给出解决方案的按位异或赋值运算符的工作

表示“等于”重载和隐式运算符的Expression.Equal解决方案

c中有指数运算符吗?如果不是,指数的解决方案是什么?

在for循环中找到带有','运算符的2个线性C解决方案,有人可以解释给定的逗号运算符语句吗?

如何在 Rx Js observables 中通过简单的解决方案更改多过滤器运算符?

UEFI解决方案问题

可能的模板解决方案

OR运算符的问题

在 PHP 中使用带有常量的空合并运算符是否有一个花哨且简短的解决方案?

我如何才能获得与Matlab的A \ b(mldivide)运算符使用numpy / scipy返回的欠定线性系统相同的“特殊”解决方案?

SQL Server:从2008年到2014年:-在add运算符中,数据类型datetime和time不兼容。还有其他解决方案吗?

如果空合并运算符应该防止空值,为什么 Visual Studio 或 ReSharper 会建议一个可能的空解决方案?

我的解决方案有什么问题?(hackerrank 练习 - 按位运算)

带速记分配的后增量运算符

&&和||是否有“和赋值运算符” 速记?

Java | =运算符问题

ODATA:“OR”运算符问题

比较运算符问题

Python OR 运算符问题

运算符=声明问题

Javascript,异步问题所需的解决方案

更改JIRA问题的解决方案

WPF模糊字体问题-解决方案

ResolveUrl XSS问题的全局解决方案

背包问题-递归解决方案说明

河内塔的迭代解决方案问题

抛硬币问题的解决方案