【发布时间】:2019-06-07 19:23:00
【问题描述】:
我需要创建一个扩展方法,它将任何类型的List<>(List<T>)作为第一个参数,this(因为它是一个扩展)和一个使用与列表相同类型的参数的方法( Method(T some_parameter)) 作为第二个参数。在此方法中,我需要对List<T> 中的每个项目进行一些操作。
delegate和Delegate我不是很懂,就是搞不懂。我尝试使用delegates、Delegates、Lambda 表达式,但什么都没有……
static void Main(string[] args)
{
List<item> lisd = new List<item>();
list.CallForEach((List <item> _list) => EXTENDER.Method(_list));
}
public static class EXTENDER
{
public static void Method<T>(List<T> list)
{
//some code
}
public static void CallForEach<T>(this List<T> list, Action<T> action)
{
foreach(var item in list)
{
action(item);
}
}
}
我需要完全使用“动作”吗? 如果有人知道类似方法的信息,请给我发送参考资料...
【问题讨论】:
-
阅读
Linq有很多类似界面的东西 -
你这样做的方式很好;这就是
Action<T>被发明的原因。 -
如果你想对列表中的每个元素都做一些事情,不要传递对
List<item>进行操作的函数,而是传递对item进行操作的函数。 -
如果你想对每个
T而不是源List<T>进行操作,那么List<T>已经有ForEach方法可以做到这一点。 -
lisd.CallForEach(oneItem => Console.WriteLine(oneItem.SomePropertyOfItem));。正如 Lee 所指出的,List<T>中已经有一个方法,但是编写自己的方法是一个很好的练习。
标签: c# generics methods system.reactive generic-list