11

有没有在 C# 中返回只读二维数组的既定方法?

我知道ReadOnlyCollection使用一维数组是正确的,并且很高兴编写自己的包装类来实现this[] {get}. 但如果这个轮子已经存在,我不想重新发明轮子。

4

2 回答 2

3

不幸的是,没有任何内置实现来处理您要求的案例。但是你自己一个简单的实现,应该不难。

唯一的想法,我希望你知道,你会做的是一个只读集合,而不是那个集合中的元素。

希望这可以帮助。

于 2012-04-18T21:16:14.237 回答
2

只有一种方法可以模拟这一点。

您需要使用私有数组创建自己的类。

最相似的数组实现是索引器:

“10.8”链接显示了二维数组的模拟。

如果仅使用 getter 实现索引器,则用户只能读取元素,而不能写入它们。但是,如果每个元素都是一个对象(引用类型),则您无法阻止修改访问的对象属性。

但是,有几种方法可以模拟“只读”对象:

  • 创建一个包装类,将数组中每个元素的属性公开为只读属性,这样它们就不能被修改
  • 使用原始值类型(如int
  • 通过返回私有数组中元素的副本而不是私有数组中的原始元素来消除更改,以便对对象所做的更改不会影响数组中的原始对象。

在其他语言(如 C++)中,有指向常量值的引用和指针,但这在 C# 中不存在。

于 2012-04-18T21:43:46.047 回答