传递数组作为参数(使用Clone()或使用引用)?

时间:2012-03-19 14:32:52

标签: c# class

我正在重构我的代码,发现了一些我从不满意的事情。我正在处理大量的大型数组,我不想一直复制数组。目前我的代码如下:

public class Mtx
{
    float[] Data;

    public Mtx(float[] data_in)
    {
        Data = (float[])data_in.Clone();
    }
}

因为否则,如果我只是这样做

public class Mtx
{
    float[] Data;

    public Mtx(float[] data_in)
    {
        Data = data_in;
    }
}

更改data_in输入参数也会更改字段本身。是否有全球解决方案。你是怎么解决的?

由于

1 个答案:

答案 0 :(得分:0)

我想如果您的目的是提供对阵列的只读访问权限并防止Mtx的使用者修改传入的数组,您可以使用ReadOnlyCollection类。虽然可能需要进行一些重构来传递这些集合,因为在Mtx的构造函数中实例化一个新的(我相信)本质上会将数据复制到ReadOnlyCollection中,重复你在第一个代码示例中完成的工作。

编辑:哎呀,仔细检查了MSDN。创建ReadOnlyCollection只是将底层数组包装为O(1)操作。所以你可以在Mtx的构造函数中做到这一点。但是,如果在类外部更改传入的数组,则其更改将反映在生成的ReadOnlyCollection中。也许这可以用来满足您的特定需求。