我喜欢在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)
这个样本,我喜欢这样做,为了我的目的.
你应该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)
如果不需要结果,可以用随机值(例如false)填充结果。
var c = sam.Select( s => {s.calculate(4); return false;} );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9307 次 |
| 最近记录: |