我正在研究一个比较对象集合的方法(因为对象支持所有类型),如果它们都相同,则返回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
答案 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;
}
}
很简单。