it possible declare attributeclass filed , constructor of complex type?
the answer is: no! see post: https://stackoverflow.com/a/38509077/2935383
scroll down other solution.
my try:
own attribute-class
class attr : system.attribute { private string _author; private a[] _additionalparam; public string author{ { return _author; } } public a[] add{ { return _additionalparam; } } public attr( string author, params a[] add ){ _author = author; _additionalparam = add; } } complex type
class a{ public string abc; public string def; public a( string a, string b ){ abc = a; def = b; } } usage attribute class
//this dosn't work [attr("me ;)", new a("a","b"), new a("c", "d")] testclass{ } cannot use new a("a","b"), not constant.
edit: constructor take complex type ;)
my solution:
i've defined second attribute-class , set multiple.
[attributeusage(attributetargets.class, allowmultiple = true, inherited = false)] class additionlattr : system.attribute public string abc; public string def; public additionlattr( string a, string b ){ abc = a; def = b; } } and change attr-class
[attributeusage(attributetargets.class, allowmultiple = false, inherited = false)] class attr : system.attribute { private string _author; public string author{ { return _author; } } public attr( string author ){ _author = author; } } usage:
[attr("me ;)"] [additionlattr("a","b")] [additionlattr("c","d")] testclass{ }
no, can't this. section 17.1.3 of c# language specification 5.0:
the types of positional , named parameters attribute class limited attribute parameter types are:
- one of following types:
bool,byte,char,double,float,int,long,sbyte,short,string,uint,ulong,ushort- the type
object- the type
system.type- an enum type [...]
- single-dimensional arrays of above
a constructor argument or public field not have 1 of these types, cannot used positional or named parameter in attribute specification.
Comments
Post a Comment