Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 跨不同程序集的函数参数_C#_Lambda - Fatal编程技术网

C# 跨不同程序集的函数参数

C# 跨不同程序集的函数参数,c#,lambda,C#,Lambda,假设我有一个在程序集a.dll中定义的函数DoStuff。此函数采用Func参数。我在B.dll中调用这个函数,称为DoStuff(()=>…) 在哪里计算Func?它似乎位于B.dll内部,但我希望它位于A.dll内部。如果Func需要外部引用,会发生什么情况?我是否被迫将它们包含在B.dll中?我可以强制它在A.dll内执行吗?lambda被编译成B并在那里执行 您可以在此处阅读有关其工作原理的更多信息: Func在哪里计算 您正在将函数定义从B传递到A。编译后的代码存在于B中A可能作为Do

假设我有一个在程序集a.dll中定义的函数
DoStuff
。此函数采用
Func
参数。我在B.dll中调用这个函数,称为
DoStuff(()=>…)


在哪里计算
Func
?它似乎位于B.dll内部,但我希望它位于A.dll内部。如果
Func
需要外部引用,会发生什么情况?我是否被迫将它们包含在B.dll中?我可以强制它在A.dll内执行吗?

lambda被编译成B并在那里执行

您可以在此处阅读有关其工作原理的更多信息:

Func在哪里计算

您正在将函数定义从
B
传递到
A
。编译后的代码存在于
B
A
可能作为
DoStuff
的一部分执行该函数

如果
Func
需要外部引用,会发生什么情况


然后,这些依赖项将需要被项目B引用,并且需要包含在最终构建中,这可能意味着也需要从正在执行的项目(您的评论中的WCF服务)中引用它们。

什么是要求,在实际项目中,您被预测要进行如此复杂的实现,出于好奇,你有可能透露更多的东西吗?这更像是一个设计决定。我有一个WCF服务,我想打电话。我在一个单独的程序集中定义了一个包装器方法,它接受一个
Func
,并捕获任何异常以将它们包装到我定义的
响应
对象中。问题是,无论在何处调用此方法,我都必须在单独的程序集中包含额外的程序集。@bbush这可能会对您有所帮助:太好了,谢谢。你能想一想我怎样才能做到这一点吗?理想情况下,我希望编译发生在A中。我对表达式树进行了修改,从技术上讲,它是有效的,但这些都是严重错误的。@bbush这样做没有多大意义。也许你可以用一个新问题来解释/扩展这一点,这会有所帮助。我刚才问了,没有回答。太好了,谢谢。你能想一想我怎样才能做到这一点吗?理想情况下,我希望编译发生在A中。我摆弄了表达式树,从技术上讲,它是有效的,但这些都受到了严重的限制。你为什么关心编译后的函数在哪里?它有什么区别?它需要额外的依赖项,具体取决于编译的位置。我更愿意允许A.dll的使用者不需要任何额外的工作。
A
不应该引用依赖项,除非它直接使用它们。只有使用依赖程序集中的类/方法的项目和最终项目(应用程序、网站、服务等)才需要引用依赖项。