如何克服两个名称空间中的相同类型,System.Linq.Expressions.Expression <tdelegate>?</tdelegate>

时间:2009-04-14 04:25:38

标签: c# reference

我在我的应用程序中定义了一些Expression变量,需要引用Microsoft.Scripting.Core。该程序集包含与主.Net框架中的System.Core程序集相同的名称空间。

我想使用System.Core程序集中的定义,因为它是稳定的,而Microsoft.Scripting.Core是alpha。

如何告诉我的应用程序优先使用System.Core中的System.Linq.Expressions命名空间而不是Microsoft.Scripting.Core,但仍然可以保留对它的引用?

2 个答案:

答案 0 :(得分:1)

如果它们是相同的命名空间但是不同的程序集,那么您可能需要查看“extern别名”,但这会很快变得非常混乱。

如果它们是不同的命名空间,那么只需使用不同的using指令;您也可以使用using别名。但是,lambdas将始终(AFAIK)使用原始命名空间。

答案 1 :(得分:1)

正如Marc所说,它并不是非常好 - 但外部别名是要走的路。

在解决方案资源管理器的“参考”部分中,选择System.Core程序集,转到属性。将“别名”属性更改为包含“syscore”,例如

Aliases: global,syscore

然后,在要使用System.Linq.Expressions的任何文件的顶部,键入:

extern alias syscore;
using syscore::System.Linq.Expressions;

这很难看,但至少有可能:)

作为一个警告,我在扩展方法和外部别名as described in this question时遇到了一些问题。