LINQ允许优雅地将方法返回的集合转换为不同的集合,即
var x = SomeMethod().Select(t => new { ... });
现在,C#中是否有一种简洁的方法来转换方法的返回值而不引入中间变量?声明和调用lambda似乎有效,但非常难看:
var x = new Func<T, object>(t => { return new { ... }; })(SomeMethod());
我是否遗漏了一些显而易见的事情,或者这是今天用C#做的最好的事情?
答案 0 :(得分:1)
您可以将Select
后跟Single
应用于根据调用SomeMethod
的结果创建的一个项目的序列,如下所示:
var x = Enumerable.Repeat(SomeMethod(), 1).Select(r => new {...}).Single();
如果你做了很多,你可以为此做一个通用的扩展方法:
static class MyExtensions {
public static TRes Transform<TSrc,TRes>(this TSrc src, Func<TSrc,TRes> selector) {
return selector(src);
}
}
现在语法变得非常简单:
var res = SomeMethod().Transform(x => new { ... });
答案 1 :(得分:0)
我只是想通用的扩展方法可以填补空白:
public static class TransformExtension
{
public static T2 Transform<T1, T2>(this T1 t1, Func<T1, T2> transform)
{
return transform(t1);
}
}
样本用法:
public class A { };
public class B { };
void Foo()
{
var a = new A();
var b = a.Transform(x => new B());
}
很高兴听到为什么这可能是一个糟糕的主意。