在C#7本地方法中重新引入新的通用参数是否是一种好的做法?

我正在试验C#7的新功能,尤其是本地方法。我写了Linq Where Operator。在C#7本地方法中重新引入新的通用参数是否是一种好的做法?

我实现了迭代器块作为本地方法(事实上,我阅读文章说本地方法是异步方法和迭代器的完美解决方案)。

我想知道这两个实现是否有区别,如果不是哪一个最好?

先执行:

这里我引入了新的泛型类型参数的本地方法,新名称为参数...

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;

}

}

}

}

第二个执行:

没有新的通用参数,没有新的p因为本地方法可以捕获封闭方法的变量。

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;

}

}

}

}

回答:

你的第二个实施更好。主要的区别是,第二执行隐含捕获它的参数,从重复自己释放你:

指定参数类型时

  • 时指定参数名称,并
  • 传递参数的功能时。

避免重复是一个非常重要的编程习惯,所以你应该更喜欢你的第二个实现。

以上是 在C#7本地方法中重新引入新的通用参数是否是一种好的做法? 的全部内容, 来源链接: utcz.com/qa/266133.html

回到顶部