我需要帮助编写一个函数或逻辑来查找我的List
类型类(名为Stack
)中的所有值是否相等。因此它将返回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);
我创建了2个对象,它们的StartDate和EndDate通过变量分配给了它们。
所以我需要一个逻辑或函数,如果所有true
都具有相同的值(例如DateTime(2018,1,1)),并且将返回StartDate
EndDate的大小写(例如DateTime(2018,1,30))。
我应该使用foreach
还是LINQ?我是C#的新手,所以不确定如何实现它。
答案 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,则意味着所有值都是唯一的;如果结果是其他值,则意味着找到了多个唯一值。