我正在重构我的代码,发现了一些我从不满意的事情。我正在处理大量的大型数组,我不想一直复制数组。目前我的代码如下:
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输入参数也会更改字段本身。是否有全球解决方案。你是怎么解决的?
由于
答案 0 :(得分:0)
我想如果您的目的是提供对阵列的只读访问权限并防止Mtx的使用者修改传入的数组,您可以使用ReadOnlyCollection类。虽然可能需要进行一些重构来传递这些集合,因为在Mtx的构造函数中实例化一个新的(我相信)本质上会将数据复制到ReadOnlyCollection中,重复你在第一个代码示例中完成的工作。
编辑:哎呀,仔细检查了MSDN。创建ReadOnlyCollection只是将底层数组包装为O(1)操作。所以你可以在Mtx的构造函数中做到这一点。但是,如果在类外部更改传入的数组,则其更改将反映在生成的ReadOnlyCollection中。也许这可以用来满足您的特定需求。