首页 新闻 赞助 找找看

C#的Attribute有什么办法可传递一个委托(方法)作为构造函数的参数

0
悬赏园豆:20 [已解决问题] 解决于 2012-01-29 09:35

以类或委托作为参数的时候,都会提示以下错误,An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type ,按这个提示来看,它需要一个常量表达式 、typeof 类型表达式、创建型表达式,而new **()这种构造表达式以及委托都不能在[Attribute]中使用,有什么办法实现将一个方法或一个类作为参数传递进去,最好是方法的委托

chen eric的主页 chen eric | 初学一级 | 园豆:4
提问于:2012-01-19 13:06
< >
分享
最佳答案
0

目前为止肯定是没有办法直接做到的,语言规范里明确说明了Attribute的限制。比较简单的替代解决方案是你先把委托都放到字典里,例如一个Dictionary<string, Action>,然后用key去标注你的attribute:

[InvokeAction("theKey")]

然后在attribute内部根据key获取到action。

收获园豆:8
水牛刀刀 | 大侠五级 |园豆:6350 | 2012-01-19 18:26
其他回答(2)
0

我当时也没找到方法

收获园豆:5
dudu | 园豆:31075 (高人七级) | 2012-01-19 13:22
0

在Attribute 中传入类似构造的字符

然后可以用System.Activator.CreateInstance(

将字符创建实例

比如[Attribute("News(\"这是新闻标题\")")]

然后将字符的类名用正则匹配出来

得到News 和 "这是新闻标题"

System.Activator.CreateInstance(System.Type.GetType("命名空间.News"), new object[] { "这是新闻标题"});

CreateInstance 方法的第二个参数是构造是的参数设置,我只提供思路,这样是可行的,当然你也可以通过反射方法来赋值

收获园豆:7
sixserve | 园豆:21 (初学一级) | 2012-01-19 15:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册