是否有可能在.Net的编译时有条件地隐藏属性?

根据预处理程序指令,我想将类中的所有属性设置为EditorBrowsableAttribute.Never。

我考虑过创建一个从EditorBrowsableAttribute派生的自定义属性,但遗憾的是该类是密封的。

我已经看过ICustomTypeDescriptor,但在GetProperties方法中,我可以获取每个属性描述符,但属性集合是readonly。

有任何想法吗?

一种方法是明确使用#if语法

 #if SOMECONDITION [EditorBrowsable(EditorBrowsableState.Never)] #endif public int SomeProperty { get; set; } 

我最近又遇到过这个问题,这次答案很快就出现了。 只需设置几个常量:

 Friend Class CompilerUtils #If HideCode Then Public Const Browsable As EditorBrowsableState = EditorBrowsableState.Never Public Const BrowsableAdvanced As EditorBrowsableState = EditorBrowsableState.Never #Else Public Const Browsable As EditorBrowsableState = EditorBrowsableState.Always Public Const BrowsableAdvanced As EditorBrowsableState = EditorBrowsableState.Advanced #End If End Class 

然后在你的代码中,像这样装饰一个成员:

  _  _