在C#中删除预编译器指令
我被要求保留一些不像遗产一样的代码,并且它充满了编译器指令,使它几乎不可读,几乎可维护.例证:
#if CONDITION_1 protected override void BeforeAdd(LogEntity entity) #else protected override void BeforeAdd(AbstractBusinessEntity entity) #endif { #if CONDITON_1 entity.DateTimeInsert = DateTime.Now; #else ((LogEntity) entity).DateTimeInsert = DateTime.Now; #endif base.BeforeAdd(entity); } 使用指令甚至更漂亮: #if CONDITION_1 using CompanyName.Configuration; #endif #if CONDITION_2||CONDITION_1 using CompanyName.Data; using CompanyName.Data.SqlBuilders; #else using CompanyName.Legacy.Database; using CompanyName.Legacy.Database.SQLBuilders; using CompanyName.Legacy.Database.SQLBuilders.parameterTypes; #endif 我以为我会给 有什么方法可以解决这个编译器指令的噩梦吗? 代码是针对.NET 3.5编译的. 更新: protected virtual void BeforeAdd(TEntity entity) {} 要么 protected virtual void BeforeAdd(AbstractBusinessEntity entity) {} 此代码从过去一段时间创建的一组库中获取其依赖关系,并且从那时起一直在“升级”.他们现在有4个不同版本的库,其中包含冲突的命名空间和不同的实现.所有这些都与使用(非常)旧版本的应用程序的“向后兼容性”有关. 结论 我最终选择了@Oded的答案,因为它作为一般方法最有意义(K.I.S.S.和所有这些).但是我不能在这种情况下使用它;你在这里看到的只是冰山一角.我不想要K.I.S.S.这个代码,如果它付给我. 解决方法
在第一种情况下,看起来您可以简单地使用该方法的多个重载而不是此构造.过载分辨率应该在这一点上处理.
在第二种情况下(使用指令) – 您可以使用所需的别名来为一些指令添加别名并包含所有指令.包含所有名称空间后会发生什么?有没有名字碰撞? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |