【发布时间】:2018-04-08 06:05:08
【问题描述】:
我正在研究一种比较对象集合的方法(因为对象支持所有类型),如果它们都相同,则返回 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
【问题讨论】:
-
我认为有地方可以改进您正在从事的工作的设计。您所做工作的更大范围是什么?为什么在
object[]中以这种方式传递所有项目是您决定要做的...... -
@GiladGreen 我很高兴听到
-
您可以通过创建 2 个方法让您的生活更轻松:
CompareValue和CompareType,而不是在一个方法中执行if else逻辑拆分 -
使用linq,你可以使用
values.Count() == values.Distinct().Count();