Cas*_*jne 10 c# linq arrays extension-methods
名为MeasurementCollection的集合上的扩展方法检查每个项的属性Template.Frequency(Enum)是否具有相同的值.
public static bool IsQuantized(this MeasurementCollection items)
{
return (from i in items
select i.Template.Frequency)
.Distinct()
.Count() == 1;
}
Run Code Online (Sandbox Code Playgroud)
编辑 有关基础类的信息
MeasurementCollection : ICollection<IMeasurement>
IMeasurement
{
IMeasurementTemplate Template { get; }
......
}
Run Code Online (Sandbox Code Playgroud)
这是一个正确的方法还是已经在Linq中有一个更简单的解决方案?该方法将在应用中得到广泛应用.
你有提示带我回到绘图板吗?
您可以找到第一个值并检查是否有其他值不同,这将避免必须评估整个集合(除非单个不同的值是最后一个)
public static bool IsQuantized(this MeasurementCollection items)
{
if(!items.Any())
return false; //or true depending on your use case
//might want to check that Template is not null, a bit a violation of level of demeter, but just an example
var firstProp = items.First().Template.Frequency;
return !items.Any(x=> x.Template.Frequency != firstProp);
}
Run Code Online (Sandbox Code Playgroud)
编辑:解决Timwi对3名调查员的担忧:
bool same = <your default> ;
var first = items.FirstOrDefault();
if (first != null) // assuming it's a class
{
same = items.Skip(1).All(i => i.Template.Frequency == first.Template.Frequency);
}
Run Code Online (Sandbox Code Playgroud)
其中仍然使用2个枚举器.对于平均值来说不是问题List<>,但对于数据库查询,使用可读性较低的问题可能会付出代价:
bool same = <your default> ;
Item first = null;
foreach(var item in items)
{
if (first == null)
{
first = item;
same = true;
}
else
{
if (item.Template.Frequency != first.Template.Frequency)
{
same = false;
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)