此方法查找不同的日期并添加日期数组。是否可以使用linq / lambda创建此方法?
public static void FindDates(DateTime[] dates, LinkedList<Letter> L, out int counter)
{
counter = 0;
foreach (var let in L)
{
if (!dates.Contains(let.Date))
{
dates[counter] = let.Date;
counter++;
}
}
}
答案 0 :(得分:2)
您需要更改方法的原型,但您可以执行以下操作:
public static IReadOnlyList<DateTime> FindDates(IEnumerable<Letter> L)
{
return L.Select(l => l.Date).Distinct().ToList();
}
通过阅读结果列表的counter
属性,可以轻松检索Count
的值。
总的来说,尽可能避免方法中的副作用是一种很好的做法。修改像你一样作为参数传递的数组是一个很好的方法,可以在以后被咬掉。
此外,由于Linq扩展方法是在IEnumerable<T>
上定义的,因此我们可以将方法的参数更改为IEnumerable<Letter>
。它与您的LinkedList<Letter>
完全相同,并且如果以后您决定使用其他集合类型(例如List<Letter>
)