询问者
二维数组常量作为Attribute的参数时编译错误

常规讨论
-
在对代码元素应用特性时,给特性传递的参数应该是常量,但是当传递参数是一维常量数组时一切正常,而二维常量数组编译时会报错。
错误是:特性实参必须是特性形参类型的常量表达式、typeof 表达式或数组创建表达式
比如说定义一个特性:
class MyAttribute : Attribute { public MyAttribute(object obj){ } }
下面的应用方式编译通过
[My(new int[] { 1, 2, 3, 4 })] class MyClass{ }
下面的应用方式会编译时出错[My(new int[,] { { 1, 2 }, { 3, 4 } })] class MyClass { }
在msdn里看了好多文章也没有找到原因……
是两个类型的差别造成的吗?一位数组和二维数组之间有在编译时什么差别?
请高手不吝赐教。
- 已更改类型 Mike FengModerator 2013年2月11日 11:34
全部回复
-
你好,
@特性实参必须是特性形参类型的常量表达式、typeof 表达式或数组创建表达式
这个错误的源头是限制你只能输入:
1)基本类型(int,float等类型)。
2)typeof表达式
3)一维数组。
-
微软没有公布为什么没有实现这个特性。所以也别猜了,不让用就不用吧。就像你说的,当你要用二维数组的时候,自己讲参数中的二维数组转换成一维的就好了。
Mike Feng
MSDN Community Support | Feedback to us
Develop and promote your apps in Windows Store
Please remember to mark the replies as answers if they help and unmark them if they provide no help. -
多谢回答。
我还是不太清楚为什么数组一定要限制成一维的呢?我感觉一维数组和高维数组在底层没有特别大的差别,一维数组可以的话高维的应该也可以实现吧……
还是有其他原因而没有实现这个特性呢?
说实话我也觉得很奇怪,要不你直接去http://connect.microsoft.com去反馈,请用英语,谢谢!