C# 或操作员问题的可能速记解决方案

C# 或操作员问题的可能速记解决方案,c#,shorthand,or-operator,C#,Shorthand,Or Operator,我试图为or操作员想出一个速记解决方案。所以我想出了这样的方法,但结果总是错误的 有人能就如何解决这个问题提供一些建议吗?这真的管用吗?如果没有,还有其他类似的解决方案吗 我知道以前有人问过这个问题,但不幸的是,没有一个解决方案适合我的需要 守则: 例如: 如果MovementState==PMovementState.Walking | | MovementState==PMovementState.Idle,则从 如果IseQualToMovementState,则PMovementStat

我试图为or操作员想出一个速记解决方案。所以我想出了这样的方法,但结果总是错误的

有人能就如何解决这个问题提供一些建议吗?这真的管用吗?如果没有,还有其他类似的解决方案吗

我知道以前有人问过这个问题,但不幸的是,没有一个解决方案适合我的需要

守则:

例如:

如果MovementState==PMovementState.Walking | | MovementState==PMovementState.Idle,则从

如果IseQualToMovementState,则PMovementState.Walking,PMovementState.Idle

从if input.text==text | | input.text==text2 | | input.text==text3

如果IsEqualsToinput.text,text,text2,text3


您可以使用Contains方法代替for循环:

public static bool IsEqualsTo(object o, params object[] p)
{
    return p.Contains(o);
}

您可以使用Contains方法代替for循环:

public static bool IsEqualsTo(object o, params object[] p)
{
    return p.Contains(o);
}

您可以使用通用版本来避免装箱/取消装箱:

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;
}

您可以使用通用版本来避免装箱/取消装箱:

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;
}

我知道以前有人问过这个问题,但不幸的是,没有一个解决方案适合我的需要你能提供你提到的问题的任何链接吗?以及这些答案不合适的原因。这确实是可枚举的。包含但有一个参数数组,并且可以很容易地实现。不需要重新编写文本示例。IsEqualsTo即使使用object也返回true同样,为什么这里的代码不起作用?我觉得不错。我知道以前有人问过这个问题,但不幸的是,没有一个解决方案适合我的需要你能提供你提到的问题的任何链接吗?以及这些答案不合适的原因。这确实是可枚举的。包含但有一个参数数组,并且可以很容易地实现。不需要重新编写文本示例。IsEqualsTo即使使用object也返回true同样,为什么这里的代码不起作用?我觉得不错。@TimSchmelter是的,我编辑来解决这个问题。@TimSchmelter p.Containso可以处理nulls@TimSchmelter是的,我编辑是为了抓住这个问题。@TimSchmelter p.Containso可以处理空值。这个作品很棒!谢谢:我想我应该从一开始就使用泛型,我的坏..@unknowner您也可以编写return p.contains。这段代码与有趣的类似-.NET Core直接显式使用默认比较器来提高性能!如果在任何与.NET Core相关的性能文章中都没有提到结果,那么这是值得进行基准测试的。这非常好!谢谢:我想我应该从一开始就使用泛型,我的坏..@unknowner您也可以编写return p.contains。这段代码与有趣的类似-.NET Core直接显式使用默认比较器来提高性能!如果在任何与.NETCore相关的性能文章中都没有提到结果,那么这是值得进行基准测试的