【发布时间】:2013-05-10 22:31:45
【问题描述】:
我正在比较两个不同类型的枚举,但看看它们之间是否有任何区别。我通过将它们都转换为兼容匿名类型的可枚举列表来做到这一点:
var curCombo = (from c in curPlan.TPM_TRAININGPLANSOLUTIONS orderby c.TASKID select new { Id = c.TASKID, Marker = c.ISMARKERCOMPLETION });
var newCombo = (from c in plan.Combo orderby c.TaskId select new { Id = c.TaskId, Marker = c.Marker });
然后看看顺序是否相同:
bool equals = curCombo.SequenceEqual(newCombo);
这很好用,但是如果plan.Combo 为空,我会得到一个异常。不幸的是,我不能强制这个数组永远为空。似乎没有办法将 newCombo 设置为 empty 数组,并且仍然将两者与 SequenceEqual 进行比较,并且把整个事情放在一个 if 块中来捕获它情况似乎相当混乱。我想要一个单一的、雄辩的 LINQ 语句。
我在想的一件事是这样的:
var newCombo = (from c in plan.Combo ?? new TrainingPlanCombo[0] orderby c.TaskId select new { Id = c.TaskId, Marker = c.Marker });
但是,这似乎有点 hacky。想法?
【问题讨论】:
-
问题是
plan.Combo是空集合的空集合,这是最佳实践。 -
@TimSchmelter - 同意。但是
plan.Combo是从来自网络浏览器的一些 JSON 反序列化的,因此很难执行。