【问题标题】:Read only two-dimensional array in C#C#中只读二维数组
【发布时间】:2012-04-30 09:03:56
【问题描述】:

在 C# 中是否有任何既定方法可以返回只读二维数组?

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

【问题讨论】:

  • 没有内置多维数组 afaik
  • 以下是 StackOverflow 上类似问题的一些答案 - stackoverflow.com/questions/678379/…
  • 这不是很相似,@Scorpion-Prince。
  • 也许是一个ReadOnlyCollection,它的每个元素也是一个ReadOnlyCollection?
  • @Scorpion-Prince:Op 说他知道可以实现某种包装器。

标签: c# immutability readonly


【解决方案1】:

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

唯一的想法,我希望你知道,你会做的是一个只读的collection,但是not元素在那个collection里面。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    只有一种方法可以模拟。

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

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

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

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

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

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    相关资源
    最近更新 更多