C# 如何从ParameterExpression获取值?
我有一个具有以下签名的方法:C# 如何从ParameterExpression获取值?,c#,expression-trees,C#,Expression Trees,我有一个具有以下签名的方法: void Method(Expression<Func<TSource, IEnumerable<TCollection>>> collectionSelector) {} 如何将参数的实际值放在那里?没有值,因为参数是占位符。参数表示方法参数(本例中为lambda参数)。可以使用任何值调用此函数/表达式。没有预设值。没有值,因为参数是占位符。参数表示方法参数(本例中为lambda参数)。可以使用任何值调用此函数/表达式。没有预
void Method(Expression<Func<TSource, IEnumerable<TCollection>>> collectionSelector) {}
如何将参数的实际值放在那里?没有值,因为参数是占位符。参数表示方法参数(本例中为lambda参数)。可以使用任何值调用此函数/表达式。没有预设值。没有值,因为参数是占位符。参数表示方法参数(本例中为lambda参数)。可以使用任何值调用此函数/表达式。没有预设值。听起来很合理。但是,每个可能的参数都有一个运行时值。这种情况有没有回调?当从其他地方调用collectionSelector并提供特定参数时,我能做出反应吗?@yBee我不确定我是否理解您的要求。我认为你应该问另一个问题,并详细解释你到底需要什么以及为什么。举个例子也没什么坏处。如果你愿意,你可以在这里贴一个问题的链接。请注意,表达式在概念上类似于Func。您知道,只有在提供参数的情况下,才能使用一个参数调用Func。Func是回调函数,在它的内部(在它的主体中),你可以看到具体的参数。我现在明白了。
方法负责为所有参数表达式提供值。因此,为了解决我的问题,我需要为该方法提供另一个参数-IEnumerable source
。然后,collectionSelector
中的每个参数表达式值将取自该源代码,我将能够为每个参数生成IEnumerable
。这听起来很合理。但是,每个可能的参数都有一个运行时值。这种情况有没有回调?当从其他地方调用collectionSelector并提供特定参数时,我能做出反应吗?@yBee我不确定我是否理解您的要求。我认为你应该问另一个问题,并详细解释你到底需要什么以及为什么。举个例子也没什么坏处。如果你愿意,你可以在这里贴一个问题的链接。请注意,表达式在概念上类似于Func。您知道,只有在提供参数的情况下,才能使用一个参数调用Func。Func是回调函数,在它的内部(在它的主体中),你可以看到具体的参数。我现在明白了。方法负责为所有参数表达式提供值。因此,为了解决我的问题,我需要为该方法提供另一个参数-IEnumerable source
。然后,collectionSelector
中的每个参数表达式值将从该源代码中获取,我将能够为每个参数生成IEnumerable
。
var collectionSelectorFunc = collectionSelector.Compile();
var collection = collectionSelectorFunc.Invoke(collectionSelector.Parameters[0]./*???*/);