所有的,我已经看到了扩展方法的例子扩展方法消耗的扩展方法像一类:消耗非静态类
class Program
{
static void Main()
{
...Call extension method here
}
}
这些似乎工作,因为消费类是静态的。有没有办法在下面的非静态类中使用扩展方法?我似乎无法找到任何这样的例子。
我有我的扩展方法类:
using System;
using System.Collections.Generic;
namespace AwesomeApp
{
public static class LinqExtensionMethods
{
public static IEnumerable<T> FindItemsBeforeAndAfter<T>(this IEnumerable<T> items, Predicate<T> matchFilling)
{
if (items == null)
throw new ArgumentNullException("items");
if (matchFilling == null)
throw new ArgumentNullException("matchFilling");
return items;
}
}
}
我有我的课消耗进一步扩展方法
namespace AwesomeApp
{
public class Leaders : ILeaders
{
var leaders = GetAllLeaders();
var orderedleaders = leaders.OrderByDescending(o => o.PointsEarned);
var test = orderedleaders.FindItemsBeforeAndAfter(w => w.UserId == 1);
}
}
如果我把从静态类的扩展方法我不要了的'扩展方法必须在非通用静态类中定义'错误:
public class test
{
public void testfunc()
{
List<int> testlist = new List<int>() {1,2,3,4,5,6,7,8,9};
testlist.FindItemsBeforeAndAfter<int>(e => e == 5);
}
}
我有通读所有关于非泛型静态类错误的stackoverflow答案,他们处理写你的扩展方法,但不处理它的使用。
所以问题是:如果使用带有非静态类的扩展方法是不可能的,那么有什么办法可以做类似的工作吗?例如它可以被称为.ExtensionMethod而不是Helper.ExtensionMethod(passedObject)?
分辨率:我以为我把公共类领导者:ILeaders的扩展方法剪切并粘贴到它自己的类中,这样我就可以使它成为静态的,但我实际上只是复制它。编译器错误指向类名,所以我没有看到扩展方法仍然在文件的底部。错误信息是准确的,每个人的回答都是正确的。
是的,这是所有的时间。我不确定你是如何得到一个错误的,它应该是正常的。 –
完全可以使用非静态类的扩展方法。作为第一个检查,你可以绝对确认你没有第二个FindItemsBeforeAndAfter的定义吗? – tolanj
您发布的领导代码在语法上无效,您有var leaders = GetAllLeaders();这是一个字段(即它不是在一个方法),但你不能使用var的字段。 – tolanj