这是一个很长的镜头,我知道......
假设我有一个收藏品
List<MyClass> objects;
Run Code Online (Sandbox Code Playgroud)
我想在集合中的每个对象上运行相同的方法,有或没有返回值.在Linq之前我会说:
List<ReturnType> results = new List<ReturnType>();
List<int> FormulaResults = new List<int>();
foreach (MyClass obj in objects) {
results.Add(obj.MyMethod());
FormulaResults.Add(ApplyFormula(obj));
}
Run Code Online (Sandbox Code Playgroud)
我会爱到可以做这样的事情:
List<ReturnType> results = new List<ReturnType>();
results.AddRange(objects.Execute(obj => obj.MyMethod()));
// obviously .Execute() above is fictitious
List<int> FormulaResults = new List<int>();
FormulaResults.AddRange(objects.Execute(obj => ApplyFormula(obj)));
Run Code Online (Sandbox Code Playgroud)
我还没有发现任何可以做到这一点的事情.有这样的事吗?
如果没有像我上面提到的那样通用,至少可能有一种方法可以用于我现在正在处理的目的:我有一个包含一个包装类的对象的集合:
class WrapperClass {
private WrappedClass wrapped;
public WrapperClass(WrappedClass wc) {
this.wrapped = wc;
}
}
Run Code Online (Sandbox Code Playgroud)
我的代码有一个集合List<WrappedClass> objects,我想将其转换为List<WrapperClass>.是否有一些聪明的Linq这样做的方式,没有做单调乏味
List<WrapperClass> result = new List<WrapperClass>();
foreach (WrappedClass obj in objects)
results.Add(new WrapperClass(obj));
Run Code Online (Sandbox Code Playgroud)
谢谢...
Mar*_*ell 18
将:
results.AddRange(objects.Select(obj => ApplyFormula(obj)));
Run Code Online (Sandbox Code Playgroud)
做?
或(更简单)
var results = objects.Select(obj => ApplyFormula(obj)).ToList();
Run Code Online (Sandbox Code Playgroud)