如何在linq中使用return-type的call方法?

rat*_*tty 6 c# linq methods

我喜欢在linq或linq的扩展方法中调用一个没有return-type的方法?在这里我的班级我有这种情况

Class A
{
   int i;
   public int K
   {
     get { return i; }
     set { i = value; }
   }
   public void calculate(int z)
   {
     this.k=z;
   }
}
Run Code Online (Sandbox Code Playgroud)

我喜欢这样做

List<A> sam = new List<A>();
//add elements to this list
var c = sam.Select( s => s.calculate(4) );
Run Code Online (Sandbox Code Playgroud)

这个样本,我喜欢这样做,为了我的目的.

Che*_*hen 9

你应该List<T>.ForEach在这里使用.

sam.ForEach(s => s.calculate(somenumber));
Run Code Online (Sandbox Code Playgroud)

我认为你.Select在你的问题中使用,因为你想得到结果(调用后A的所有实例calculate).您可以通过变量直接获取它们sam.ForEach修改sam的每个元素,并将"更改"应用于列表本身.


小智 6

如果您想要迭代序列(IEnumerable)并为其调用代码,则可以使用为序列中的每个项调用的操作来实现扩展方法,例如:

public static void ForEach<T>(this System.Collection.Generic.IEnumerable<T> list, System.Action<T> action)
{
    foreach (T item in list)
        action(item);
}
Run Code Online (Sandbox Code Playgroud)

如果要在不实现foreach()块的情况下调用小逻辑(一行),这是有意义的:

public class MyClass
{
    public void DoSomethingInOneLine()
    {
        // do something
    }
}

public static void Test(System.Collections.Generic.IEnumerable<MyClass> list)
{
    list.ForEach(item => item.DoSomethingInOneLine());
}
Run Code Online (Sandbox Code Playgroud)


Pro*_*one 5

如果不需要结果,可以用随机值(例如false)填充结果。

var c = sam.Select( s => {s.calculate(4); return false;} );
Run Code Online (Sandbox Code Playgroud)