如何检查“类列表”中的所有值是否相同?

时间:2018-08-23 17:01:49

标签: c#

我需要帮助编写一个函数或逻辑来查找我的List类型类(名为Stack)中的所有值是否相等。因此它将返回truefalse

public class Stack
{
    public string Key         { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate   { get; set; }
}

我创建了一个具有上述3个属性的类。

List<Stack> Stack = new List<Stack>();
Stack WOKey = new Stack() { Key = Resource, StartDate = WorkOrderST, EndDate = WorkOrderED };
Stack.Add(WOKey);

我创建了2个对象,它们的StartDate和EndDate通过变量分配给了它们。

所以我需要一个逻辑或函数,如果所有true都具有相同的值(例如DateTime(2018,1,1)),并且将返回StartDate EndDate的大小写(例如DateTime(2018,1,30))。

我应该使用foreach还是LINQ?我是C#的新手,所以不确定如何实现它。

2 个答案:

答案 0 :(得分:4)

这对于LINQ非常简单:

bool allSame = Unavailability.All(s => s.StartDate == new DateTime(2018, 1, 1) &&
                                       s.EndDate == new DateTime(2018, 1, 30));

如果序列中的每个项目都满足条件,则.All返回true。参见.NET Enumerable.All

如果要查看它们是否相等,只需使用第一个值...

bool allSame = Unavailability.All(s => s.StartDate == Unavailability[0].StartDate &&
                                       s.EndDate == Unavailability[0].EndDate);

答案 1 :(得分:2)

我会使用Linq

您可以执行以下操作:

别忘了导入using System.Linq;

List<Stack> Unavailability = new List<Stack>
{
        new Stack{  Key = "A", StartDate = new DateTime(2018,1,1), EndDate = new DateTime(2018,1,30) },
        new Stack{  Key = "B", StartDate = new DateTime(2018,1,1), EndDate = new DateTime(2018,1,30)},
        new Stack{  Key = "C", StartDate = new DateTime(2018,1,1), EndDate = new DateTime(2018,1,30)}
};

bool allUnique = Unavailability.Select(_ => new { _.StartDate, _.EndDate }).Distinct().Count() <= 0;

我在这里所做的是使用Select将Stack列表投影到一个匿名类型,其中包含您要比较的对象。 现在我们可以使用Distinct运算符来确定所有不同的值。

如果结果小于或等于0,则意味着所有值都是唯一的;如果结果是其他值,则意味着找到了多个唯一值。