我可以在C#中的另一个方法内部的foreach循环中使用方法链接调用方法吗?
我有以下资料:我可以在C#中的另一个方法内部的foreach循环中使用方法链接调用方法吗?,c#,methods,foreach,chaining,C#,Methods,Foreach,Chaining,我有以下资料: public static void ForEachIterationIn(IEnumerable<T> list, Action<T> action) { foreach(T item in list) { action(item); } } foreach(T item in list) { Do(action(item)); // Or RemoveWhen(action(item))
public static void ForEachIterationIn(IEnumerable<T> list, Action<T> action)
{
foreach(T item in list)
{
action(item);
}
}
foreach(T item in list)
{
Do(action(item));
// Or RemoveWhen(action(item))
// Or whatever method I use in the chain
}
是否可以使用方法链接来执行以下操作
ForEachIterationIn(list).Do(item => DoSomething(item));
因此,如果我决定,我可以扩展它并创建如下内容:
ForEachIterationIn(list).RemoveWhen(item => item != 10);
这意味着每种方法基本上都会执行以下操作:
public static void ForEachIterationIn(IEnumerable<T> list, Action<T> action)
{
foreach(T item in list)
{
action(item);
}
}
foreach(T item in list)
{
Do(action(item));
// Or RemoveWhen(action(item))
// Or whatever method I use in the chain
}
您可以执行以下操作:
public class Iterator
{
public List<string> Items { get; set; }
public Iterator(List<string> items)
{
Items = items;
}
public Iterator AddString(string s)
{
this.Items.Add(s);
return this;
}
public Iterator AddAnotherString(string s)
{
this.Items.Add(s);
return this;
}
public override string ToString()
{
return String.Join('-', this.Items.ToArray());
}
}
公共类迭代器
{
公共列表项{get;set;}
公共迭代器(列表项)
{
项目=项目;
}
公共迭代器AddString(字符串s)
{
本.项目.添加项;
归还这个;
}
公共迭代器AddAnotherString(字符串s)
{
本.项目.添加项;
归还这个;
}
公共重写字符串ToString()
{
返回字符串.Join('-',this.Items.ToArray());
}
}
然后使用它:
class Program
{
static void Main(string[] args)
{
var items = new List<string> { "a", "b" };
var iterator = new Iterator(items);
Console.WriteLine(iterator.AddString("c").AddAnotherString("d").ToString());
}
}
类程序
{
静态void Main(字符串[]参数)
{
var items=新列表{“a”,“b”};
变量迭代器=新迭代器(项);
Console.WriteLine(iterator.AddString(“c”).AddAnotherString(“d”).ToString());
}
}
只需使用LINQ,这是它的全部前提,作为查询构建工具。RemoveWhen应该在列表上工作,因此ForEachiteration必须返回它。我想,先兆致畸的目的差不多已经消失了。迭代和调用每个项的委托的逻辑在RemoveWhen中。如果可以将其添加到列表中,则可以使用ForEach
方法。或者你可以自己做。但我还是坚持林克的观点。我建议你不要走这条路。事实上,把它擦掉。让我们再来一次。@IndieWafflus,所有这些都是LINQ专门设计用来做的事情。与其重新创建一个低级的LINQ仿制品,不如使用LINQ。如果有一个操作您不能使用它,那么创建您自己的方法来模拟它的样式,即一个方法接受IEnumerable并生成一个新的IEnumerable并应用相关转换。如果你不知道LINQ能做什么,那就花点时间学习它能做什么,因为这比自己从头开始重新创建它要容易得多,也更有效。