动态使用指令

Sam*_*ami 1 .net c# using

是否可以做类似的事情:

using MyCustomDto = (flag == "library1") ? MyLibrary1.Dtos.MyDto1 : MyLibrary2.Dtos.MyDto2;
Run Code Online (Sandbox Code Playgroud)

我不能为此找到正确的语法。因此,根据appsettings.config中的标志,我想从特定的库加载Dto,它们具有不同的名称空间,如您所见,这将是using指令块的一部分,在该块中,您通常会看到以下语句:

using System.Collections.Generic;
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 8

No. using指令在编译时有效,在执行时无效。

您可能具有不同的编译时配置,定义了不同的编译器符号,然后使用:

#if LIBRARY1
using MyLibrary1.Dtos.MyDto1;
#else
using MyLibrary2.Dtos.MyDto1;
#endif
Run Code Online (Sandbox Code Playgroud)

但这将是一次完全的编译时检查,并且无法使用appsettings进行修改。

为了实现真正的动态,您需要在两种情况下都使用通用类型,并可能在执行时选择特定于库的子类。在不了解您要实现的目标的情况下很难给出具体的示例,但这与其他指令无关using。代码中的类型将始终意味着同一件事,它们可以使用不同的派生类以不同的方式实例化。