Ram*_*Vel 5 c# extension-methods static-classes
我有条件扩展c#中的Enumerable类来添加接受长参数的新Range方法.我无法定义这样的方法
public static IEnumerable<long> Range(this Enumerable source, long start, long length)
{
for (long i = start; i < length; i++)
{
yield return i;
}
}
Run Code Online (Sandbox Code Playgroud)
由于扩展方法只能通过其对象访问.它给了我一个错误
'System.Linq.Enumerable':静态类型不能用作参数
我们可以澄清一下如何做到这一点
注意:我知道我们可以在没有扩展方法的情况下轻松解决这个问题,但我需要这个Enumrable类.
你(像我一样)正在寻找静态扩展方法:
http://madprops.org/blog/static-extension-methods/
这在C#中是不可能的.最接近的替代方法是定义另一个具有相似名称的静态类(LongEnumerable?)并将静态方法添加到该类中.
扩展方法只能在类型的实例上调用,并且由于Enumerable它是静态类型,因此永远不会有任何实例,这意味着您无法扩展它.
将您的Range方法作为扩展也没有任何意义IEnumerable<T>.您的方法只生成一系列long值,它不需要扩展任何特定实例.
改为使用标准的静态实用方法:
var example = EnumerableUtils.Range(0, long.MaxValue).Where(x => (x % 2) == 0);
// ...
public static class EnumerableUtils
{
public static IEnumerable<long> Range(long start, long count)
{
for (long i = start; i < start + count; i++)
{
yield return i;
}
}
}
Run Code Online (Sandbox Code Playgroud)