用包含在该lambda中的匿名类型定义lambda表达式
我试图避免在我的lambda表达式中用于分组集合的动态类型。 类型在编译时是匿名定义的(并且据我所知可以毫不含糊地定义)。 我宁愿不把类型定义为一个完整的类,因为我在这个单一方法中只使用了几次。
示例代码:
Func<MyData, dynamic> dataGrouping = md => new
{
md.Property1,
md.Property2,
md.Property3
};
var groupedData = myDataCollection.GroupBy(dataGrouping);
虽然这会进行编译,但由于类型是动态的,因此它不会在组内产生任何智能感知或强大的打字。
我无法将dataGrouping的类型指定为var,因为我在C#中,并且我收到了无法将lambda表达式分配给隐式类型局部变量的抱怨。
我可以用匿名类型的GetType()的结果替换动态吗? 然后我在lambda中使用它之前需要这个类型,但是在我已经进入lambda本身之前,我看不到一个有用的方法来获取它。
有没有一种优雅的方式来获得这个匿名类的类型?
是否有任何理由不希望将lambda表达式直接放在GroupBy
调用中? 这就是它们通常挂在一起的方式:
var groupedData = myDataCollection.GroupBy(md => new
{
md.Property1,
md.Property2,
md.Property3
});
你可以用一个额外的方法来完成这项工作:
static Func<TSource, TResult> CreateFunction<TSource, TResult>
(Func<TSource, TResult> function)
{
return function;
}
然后使用类型推断:
var dataGrouping = CreateFunction((MyData md) => new
{
md.Property1,
md.Property2,
md.Property3
});
请注意,我是如何显式键入参数的,以便类型推断可以使用某些内容。 这会起作用,但它有点难看。 我会直接在方法调用中嵌入lambda表达式,除非您有任何特殊原因不要。
链接地址: http://www.djcxy.com/p/90345.html上一篇: Defining a lambda expression with an anonymous type contained within that lambda