Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.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#_Conditional_Overriding_Solution_Conditional Attribute - Fatal编程技术网

C#按符号的不同方法代码

C#按符号的不同方法代码,c#,conditional,overriding,solution,conditional-attribute,C#,Conditional,Overriding,Solution,Conditional Attribute,我遇到的情况是,方法代码实现取决于所选的VisualStudio解决方案配置 每个配置都针对一个不同的外部DLL,该DLL提供不同的API版本,以便我区分它们。这些DLL适用于Autodesk Revit API,如果这些信息有帮助的话 正如您所想,每个API版本虽然非常相似,但它们之间可能存在细微的差异,这迫使我根据目标版本使用不同的代码 我已经为每个配置定义了不同的符号(REVIT_2014,REVIT_2015,等等),我知道我可以依赖良好的旧#ifdef指令,但首先我想探索是否有更优雅的

我遇到的情况是,方法代码实现取决于所选的VisualStudio解决方案配置

每个配置都针对一个不同的外部DLL,该DLL提供不同的API版本,以便我区分它们。这些DLL适用于Autodesk Revit API,如果这些信息有帮助的话

正如您所想,每个API版本虽然非常相似,但它们之间可能存在细微的差异,这迫使我根据目标版本使用不同的代码

我已经为每个配置定义了不同的符号(
REVIT_2014
REVIT_2015
,等等),我知道我可以依赖良好的旧
#ifdef
指令,但首先我想探索是否有更优雅的解决方案

我已经阅读了有关
ConditionalAttribute
的内容,但我无法以我想要的方式使用它,即:

class Test
{
    [Conditional("REVIT_2015")]
    bool TestMethod
    {
        //Revit 2015 specific code
    }

    [Conditional("REVIT_2016")]
    bool TestMethod
    {
        //Revit 2016 specific code
    }
}
As
ConditionalAttribute
不允许重写方法,也不允许方法返回值

在我开始用丑陋的
#ifdef
指令来折磨我的代码之前,还有其他解决方案吗


提前感谢。

如果您采用这种实际配置,效果肯定会更好。类似于一个设置,您可以在运行时读回该设置以决定要执行的操作。因此,一个二进制文件可以处理任何版本的Revit,而您无需构建正确的库并确保它与计算机匹配。或者在运行时直接读取Revit版本,因此根本不需要配置。@HansPassant如果我选择使用您的建议,我将如何处理从同一二进制文件链接到不同DLL的问题?我的意思是,2017年API可能有2016年API中不可用的方法,我还必须考虑弃用和过时的方法以及特定API版本后不再存在的方法。