Mic*_*tum 3 .net c# extension-methods
我编写了一些扩展方法将IEnumerable和IList转换为字符串.现在,由于IList继承自IEnumerable,我必须以不同的方式命名它们.
我只是想知道是否有办法避免这种情况?我可以在IEnumerable上使用扩展方法,然后在具有相同名称和相同签名的IList上使用另一个方法吗?有点像覆盖,除了扩展方法当然是静态的.
我只想在List上使用更有效的方法体,而不必使用第二个方法名称.
是的,我知道在这个特定的情况下,我应该首先运行一个探查器来真正看看第二种方法是否更好,但我感兴趣的是它通常可以覆盖派生类中的扩展方法.
你为什么不做BCL所做的事情,并尝试在同一方法中做一个贬低?
有点喜欢这个:
public static string Foo<T>(this IEnumerable<T> source)
{
var list = source as IList<T>;
if(list != null)
{
// use more efficient algorithm and return
}
// default to basic algorithm
}
Run Code Online (Sandbox Code Playgroud)
如果你必须有两个具有相同名称的独立扩展方法,你可以将它们放在两个不同命名空间的类中,但这意味着你永远不能在同一个代码文件中使用它们,所以这几乎不是最佳的.