【发布时间】:2019-01-06 04:39:25
【问题描述】:
为什么 C# 的设计不允许这样的声明?
public int[10] someInts;
public int[10] someMethod();
这些行会引发 CS0270 错误。这背后的原因是什么?在接口中强制数组长度或重写类的能力在某些情况下会很有用。
编辑:
根据 Marc Gravell 的评论,我想指出的事实是,数组的长度在创建时与其类型一样已知。如果我们在将数组分配给字段/返回值时可以强制执行数组的类型,为什么我们不能强制执行它的长度?它会使这样的代码失败:
int length = 10;
int[] arr = new int[length];
int[10] anotherArr = arr; //length not known at compile time
和这个一样:
string obj1 = "";
object obj2 = "";
obj1 = obj2; //cannot implicitly convert type 'object' to 'string'
【问题讨论】:
-
why we can't enforce its length因为编译器不这样做 - 没有人内置该功能。blogs.msdn.microsoft.com/ericgu/2004/01/12/minus-100-points 显示了您在添加“简单功能”时需要考虑的那种想法(和这绝对是不是一个简单的功能)。
标签: c# arrays variables methods language-design