比较params对象数组

时间:2018-04-08 06:05:09

标签: c# arrays object

我正在研究一个比较对象集合的方法(因为对象支持所有类型),如果它们都相同,则返回true,但如果一个或多个不同,则返回false。

这就是我所拥有的:

    public static bool Compare(bool compareTypes = false, params object[] values)
    {
        if (!compareTypes)
        {
            if (values is null || values.Length == 0) return false;
            else if (values.Length == 1) return true;
            else return values[0] == values[1];
        }
        else
        {
            if (values is null || values.Length == 0) return false;
            else if (values.Length == 1) return true;
            else return values[0].GetType() == values[1].GetType();
        }
    }

只要对象的数量为2,它就能正常工作。

我的问题是我想让方法比较传递的所有参数的值或类型,而不管数量

  

这就是我想要的方法

Compare (false, "Hello", "Hello") //True
Compare(false, "Hello", "Bye") //False
Compare(true, 0, 1) //True
Compare(true, "Hi", 20) //False
Compare(false, "LOL", "LOL", "LOL", "LOL") //True
Compare(false, "LOL", "LOL", "LOL", "lol") //False

2 个答案:

答案 0 :(得分:1)

如果您对2个对象的逻辑没有问题,为什么不只是以相同的方式将所有对象与循环进行比较?

public static bool Compare(bool compareTypes = false, params object[] values)
{
    if (!compareTypes)
    {
        if (values == null || values.Length == 0)
        {
            return false;
        }
        else if (values.Length == 1)
        {
            return true;
        }
        else if (values.Length == 2){
            return values[0] == values[1];
        }
        else 
        {
            bool result = true;
            for(int i = 0; i < values.Length - 1; i++)
            {
                if(values[i] != values[i+1])
                {
                    result = false;
                    break;
                }
            }
            return result;
        }
    }
    else
    {
        if (values == null || values.Length == 0)
        {
            return false;
        }
        else if (values.Length == 1)
        {
            return true;
        }
        else if (values.Length == 2)
        {
            return values[0].GetType() == values[1].GetType();
        }
        else 
        {
            bool result = true;
            for(int i = 0; i < values.Length - 1; i++)
            {
                if(values[i].GetType() != values[i+1].GetType())
                {
                    result = false;
                    break;
                }
            }
            return result;
        }
    }
}

以下是您的测试用例的运行示例:https://dotnetfiddle.net/uDA5Mb

答案 1 :(得分:0)

您也可以使用递归方式并简化代码。

    public static bool Compare(bool compareTypes = false, params object[] values)
    {
        if (values is null || values.Length == 0)
            return false;
        else if (values.Length == 1)
            return true;
        else if (values.Lenght == 2)
            if (!compareTypes)
                return values[0] == values[1];
            else
                return values[0].GetType() == values[1].GetType();
        else
        {
            for(int i = 0; i < values.Lenght - 1; i++)
               if(!Compare(compareTypes, values[i], values[i+1]))
                    return false;
            return true;
        }
    } 

很简单。