假设我有一个在程序集A.dll中定义的函数DoStuff
。此函数采用Func<T>
参数。我将此函数称为B.dll中的DoStuff(() => ...)
。
Func<T>
评估在哪里?它似乎在B.dll里面,但我希望它在A.dll里面。如果Func<T>
需要外部参考,会发生什么?我被迫把它们包括在B.dll中吗?我可以强制它在A.dll中执行吗?
答案 0 :(得分:4)
将lambda编译成B并在那里执行。
您可以在此处详细了解其工作原理:What are C# lambda's compiled into? A stackframe, an instance of an anonymous type, or?
答案 1 :(得分:3)
Func在哪里评估?
您正在将函数定义从B
传递给A
。 已编译的代码存在于B
中。 A
可能执行该函数作为DoStuff
的一部分。
如果
Func<T>
需要外部参考,会发生什么?
然后,这些依赖项需要由项目B引用,并且需要包含在最终构建中,这可能意味着从执行项目(来自您的注释的WCF服务)引用它们。