gpt4 book ai didi

c# - 如何公开内部 System.Array

转载 作者:太空宇宙 更新时间:2023-11-03 19:35:38 25 4
gpt4 key购买 nike

我有一个类,它是两个固定长度数组以及其他一些成员的容器。我想在类外公开数组的元素以进行赋值。

例子是:

    using System.Collections.ObjectModel;

class ArrayContainer<T, U>
{
private T[] x;
private U[] y;

// Some other members and constructor

public Collection<T> X
{
get { return new Collection<T>(this.x); }
}

public Collection<U> Y
{
get { return new Collection<U>(this.y); }
}
}

如果我尝试执行 instance.X[i] = value 我会收到一个异常,提示该集合是只读的。所以我有三个问题:

  1. 为什么我不能完成上述作业?
  2. 公开内部成员是否正确?
  3. 每次创建数组时创建一个"new"集合是否存在任何性能问题?

最佳答案

  1. 不确定,但由于您返回的是一个新的收藏集,因此无论您对它做什么都无所谓。一旦垃圾收集器删除集合,更改将丢失。对集合所做的更改不会影响原始数组。

  2. 不,正确的方法是直接公开数组,或者,如果您担心客户端不会很好地发挥作用,则通过 getter 和 setter 公开它们。由于 C# 只允许每个类有 1 个带有参数的属性,因此您必须为此使用函数:

    instance.SetX(int index, T value);
    T val = instance.GetX(int index);
  3. 是的,制作副本总是需要额外的时间和内存。如果这是性能关键代码,则此解决方案是 Not Acceptable ,否则可能没问题。

关于c# - 如何公开内部 System.Array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1776739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com