我可以在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能做什么,那就花点时间学习它能做什么,因为这比自己从头开始重新创建它要容易得多,也更有效。