【发布时间】:2010-09-10 19:14:33
【问题描述】:
一个名为 MeasurementCollection 的集合上的扩展方法检查每个项目的属性 Template.Frequency (Enum) 是否具有相同的值。
public static bool IsQuantized(this MeasurementCollection items)
{
return (from i in items
select i.Template.Frequency)
.Distinct()
.Count() == 1;
}
编辑 有关底层类的信息
MeasurementCollection : ICollection<IMeasurement>
IMeasurement
{
IMeasurementTemplate Template { get; }
......
}
这是一种正确的方法,还是在 Linq 中已有更简单的解决方案? 此方法将在应用程序中大量使用。
你有什么小窍门要跟我一起回到绘图板上吗?
【问题讨论】:
-
您对可读性的要求是什么?速度重要吗?通常的情况是什么。它们是相同的还是不同的?
-
根据您在此问题上添加的#arrays 标签,我们是否可以假设您的MeasurementCollection 对象存储为数组或ArrayList?我们能否从 MeasurementCollection 中获得
.Count而不会产生太多开销?哪个答案是正确的将取决于对您的基础收藏有更多了解。 -
为什么您不想将此方法(带有任何实现)添加到 MeasurementCollection 中?你为什么要为此使用扩展方法?如果此功能是此特定抽象的一部分,请明确显示。
-
@Sergey Template 是Measurement 的成员但不是MeasurementCollection 的成员,只有在这种方法的情况下,两个类都满足。通过在 MeasurementCollection 类中实现此方法,我会将它们永远耦合在一起,而 IMO 会造成一团糟。 (对不起,我不能在这里提供更多代码;)
标签: c# linq arrays extension-methods