[英]Is it a good practice to reintroduce new generic parameters in C# 7 Local Methods?
我正在嘗試C#7的新功能,尤其是本地方法。 我寫了Linq Where運算符。
我將迭代器塊實現為本地方法(實際上,我讀過一些文章說,本地方法是異步方法和迭代器的理想解決方案)。
我想知道這兩種實現之間是否有區別,如果沒有,那是最好的?
第一次執行:
在這里,我為本地方法引入了新的泛型類型參數,為參數引入了新名稱...
public static IEnumerable<TSource> Where<TSource> (this IEnumerable<TSource> source, Func<TSource, bool> predicate) {
if(source == null) throw new ArgumentNullException(nameof(source));
if(predicate == null) throw new ArgumentNullException(nameof(predicate));
return WhereIterator(source, predicate);
IEnumerable<TSequence> WhereIterator<TSequence> (IEnumerable<TSequence> localSource, Func<TSequence, bool> localPredicat) {
foreach(TSequence item in localSource) {
if(localPredicat(item)) {
yield return item;
}
}
}
}
第二實施:
沒有新的通用參數,也沒有新參數,因為本地方法可以捕獲封閉方法的變量。
public static IEnumerable<TSource> Where<TSource> (this IEnumerable<TSource> source, Func<TSource, bool> predicate) {
if(source == null) throw new ArgumentNullException(nameof(source));
if(predicate == null) throw new ArgumentNullException(nameof(predicate));
return WhereIterator();
IEnumerable<TSource> WhereIterator () {
foreach(TSource item in source) {
if(predicate(item))
yield return item;
}
}
}
}
您的第二個實現更好。 主要區別在於第二種實現隱式捕獲其參數,使您不必重復自己的工作:
避免重復是非常重要的編程習慣,因此您應該選擇第二種實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.