有没有办法做到以下几点?我see,属性参数必须是一个常量表达式,那么我将如何解决这个问题呢?如果我不想使用绑定将某些属性加载到datagridview中,那么下一个最佳替代方案是什么?
class TestObj
{
private bool isBrowsable = false;
[Browsable(isBrowsable)]
public string String1
{
get
{
return "Foo";
}
}
[Browsable(isBrowsable)]
public string String2
{
get
{
return "Baz";
}
}
}
答案 0 :(得分:6)
您可以通过实现ICustomTypeDescriptor接口在运行时提供动态自定义类型信息 - 但这非常简单,只需要使用属性装饰属性就不那么简单了。
答案 1 :(得分:3)
对于运行时,我认为您可能正在查看ICustomTypeDescriptor。如果是编译时决定,您可以使用编译器指令:
#define ISBROWSABLE
#if ISBROWSABLE
[your attribute]
#endif
答案 2 :(得分:0)
您可以使用类似的方法从某个配置文件或数据库加载值 How to set dynamic value in my Attribute通过传递类和属性名称,例如
[IsBrowsable(" classname"," propertyname")]
然而,键入字符串名称会很烦人,这很明显,并且应该能够从反射中确定。 您可以尝试使用IL Weaver工具,例如PostSharp或Fody。(我相信,他们有能力做到这一点,但是现在还没有例子)☑