首页 > 解决方案 > 我可以使用 C# 中另一个方法内部的 foreach 循环中的方法链接来调用方法吗?

问题描述

我有以下内容:

public static void ForEachIterationIn(IEnumerable<T> list, Action<T> action)
{
    foreach(T item in list)
    {
        action(item);
    }
}

并且可以这样称呼它:

ForEachIterationIn(list, item => DoSomething(item));

是否可以使用方法链接来执行以下操作?

ForEachIterationIn(list).Do(item => DoSomething(item));

所以如果我决定,我可以扩展它并创建类似的东西:

ForEachIterationIn(list).RemoveWhen(item => item != 10);

这意味着每种方法基本上都会执行以下操作:

foreach(T item in list)
{
    Do(action(item));
    // Or RemoveWhen(action(item))
    // Or whatever method I use in the chain
}

标签: c#methodsforeachchaining

解决方案


您可以执行以下操作:

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());
        }
    }

然后使用它:

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());

        }
    }

推荐阅读