以类或委托作为参数的时候,都会提示以下错误,An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type ,按这个提示来看,它需要一个常量表达式 、typeof 类型表达式、创建型表达式,而new **()这种构造表达式以及委托都不能在[Attribute]中使用,有什么办法实现将一个方法或一个类作为参数传递进去,最好是方法的委托
目前为止肯定是没有办法直接做到的,语言规范里明确说明了Attribute的限制。比较简单的替代解决方案是你先把委托都放到字典里,例如一个Dictionary<string, Action>,然后用key去标注你的attribute:
[InvokeAction("theKey")]
然后在attribute内部根据key获取到action。
我当时也没找到方法
在Attribute 中传入类似构造的字符
然后可以用System.Activator.CreateInstance(
将字符创建实例
比如[Attribute("News(\"这是新闻标题\")")]
然后将字符的类名用正则匹配出来
得到News 和 "这是新闻标题"
System.Activator.CreateInstance(System.Type.GetType("命名空间.News"), new object[] { "这是新闻标题"});
CreateInstance 方法的第二个参数是构造是的参数设置,我只提供思路,这样是可行的,当然你也可以通过反射方法来赋值