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

C# 如何检查类列表中的所有值是否相同?,c#,C#,我需要帮助来编写函数或逻辑,以确定我的列表中的class类型(名为堆栈)的所有值是否相等。因此,它将返回true或false public class Stack { public string Key { get; set; } public DateTime StartDate { get; set; } public DateTime EndDate { get; set; } } 我已经创建了一个具有上述3个属性的类 List<Stac

我需要帮助来编写函数或逻辑,以确定我的
列表
中的class类型(名为
堆栈
)的所有值是否相等。因此,它将返回
true
false

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);
列表堆栈=新列表();
Stack WOKey=new Stack(){Key=Resource,StartDate=WorkOrderST,EndDate=WorkOrderED};
Stack.Add(WOKey);
我已经创建了两个对象,通过变量为它们指定了StartDate和EndDate

因此,我需要一个逻辑或函数,它将返回
true
,如果所有
StartDate
都有相同的值(例如DateTime(2018,1,1))和EndDate(例如DateTime(2018,1,30))的情况


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

这对于LINQ来说非常简单:

bool allSame = Unavailability.All(s => s.StartDate == new DateTime(2018, 1, 1) &&
                                       s.EndDate == new DateTime(2018, 1, 30));
如果序列中的每个项都满足条件,则
.All
返回true。看

如果你想知道它们是否都相等,只需使用第一个值

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

这对于LINQ来说非常简单:

bool allSame = Unavailability.All(s => s.StartDate == new DateTime(2018, 1, 1) &&
                                       s.EndDate == new DateTime(2018, 1, 30));
如果序列中的每个项都满足条件,则
.All
返回true。看

如果你想知道它们是否都相等,只需使用第一个值

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

我会使用
Linq

您可以执行以下操作:

不要忘记使用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;
列表不可用=新列表
{
新堆栈{Key=“A”,StartDate=new DateTime(2018,1,1),EndDate=new DateTime(2018,1,30)},
新堆栈{Key=“B”,StartDate=new DateTime(2018,1,1),EndDate=new DateTime(2018,1,30)},
新堆栈{Key=“C”,StartDate=new DateTime(2018,1,1),EndDate=new DateTime(2018,1,30)}
};

bool allUnique=Unavailability.Select(=>new{{uu.StartDate,u.EndDate}).Distinct().Count()我将使用
Linq

您可以执行以下操作:

不要忘记使用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;
列表不可用=新列表
{
新堆栈{Key=“A”,StartDate=new DateTime(2018,1,1),EndDate=new DateTime(2018,1,30)},
新堆栈{Key=“B”,StartDate=new DateTime(2018,1,1),EndDate=new DateTime(2018,1,30)},
新堆栈{Key=“C”,StartDate=new DateTime(2018,1,1),EndDate=new DateTime(2018,1,30)}
};

bool allUnique=Unavailability.Select(=>new{{uu.StartDate,u.EndDate}).Distinct().Count()用于使用LINQ并以简洁的方式进行操作。这是正确的答案。谢谢你,先生,但它给了我一些错误,因为我的错误没有分享我在我的项目中使用的确切代码。我改变了话题。你能再帮我查一下吗。而且我不知道日期,所以我不能在LinqupNote中静态地定义它,以便使用LINQ并以简洁的方式进行操作。这是正确的答案。谢谢你,先生,但它给了我一些错误,因为我的错误没有分享我在我的项目中使用的确切代码。我改变了话题。你能再帮我查一下吗。我也不知道日期,所以我不能在LINQT中静态地定义它。这是一个很好的方法,虽然冗长且不可重用。我喜欢MoreLinq的扩展方法。如果您不想将包引用带到MoreLinq,可以快速构建类似的东西。你好,马蒂。这正是我想要的。区分StartDate和EndDate以确定其是否相同!但我已经编辑了主题中的代码,之前是错误发布的。很抱歉给您带来不便,您能帮助我在主题中更新的新代码上编写相同的逻辑吗?@ZhrezPain您是什么意思?您需要检查堆栈列表中的所有值是否唯一吗?您好,Matthiee,您的答案与我需要的类似!谢谢:)我的最后一个代码:int flag=Stack.Select(s=>new{s.StartDate,s.EndDate}).Distinct().Count();这是一个很好的方法,虽然冗长且不可重用。我喜欢MoreLinq的扩展方法。如果您不想将包引用带到MoreLinq,可以快速构建类似的东西。你好,马蒂。这正是我想要的。区分StartDate和EndDate以确定其是否相同!但我已经编辑了主题中的代码,之前是错误发布的。很抱歉给您带来不便,您能帮助我在主题中更新的新代码上编写相同的逻辑吗?@ZhrezPain您是什么意思?您需要检查堆栈列表中的所有值是否唯一吗?您好,Matthiee,您的答案与我需要的类似!谢谢:)我的最后一个代码:int flag=Stack.Select(s=>new{s.StartDate,s.EndDate}).Distinct().Count();