将引用类型的值传递给 Dictionary.Add 方法

Pass value of reference type to Dictionary.Add method

提问人:robin bosch 提问时间:4/12/2022 最后编辑:Lee Taylorrobin bosch 更新时间:4/12/2022 访问量:27

问:

所以我有一个相当大的 2D 锯齿状数组,我想把它分成更小的数组。之后,我想将那些较小的 2D 锯齿状数组存储在字典中。

为此,我使用 .在 Dictionary 上添加方法。所以现在我添加了较小的数组,但我只将存储较小数组的变量的引用添加到方法中,或者至少这是我在盯着屏幕、调试和 3 次精神崩溃 4 小时后得出的结论。Dictionary.Add

因此,如果我为较小的数组更改变量,我这样做显然是因为我想将其分成多文件片段,我最终也会更改我存储在 Dictionary 中的值,并且我最终会得到一个始终存储相同值的 Dictionary。

我也没有发现这个错误,因为在我更改代码之前,我为较小的数组运行了我的变量,抛出了另一个函数,或者至少我认为我这样做了。但出于某种原因,我无法复制这一点。那么,最好的方法是什么,将一个值而不是一个引用类型传递给我的Dictionary.Add方法呢?我发现了 ref 关键字,但没有发现对应部分。

我的代码:

(currentChunkArray 是我用于较小数组的数组) (ChunkData.FalloffMaps是我的字典)

float[][] currentChunkArray = new float[ChunkData.verticies + 2 * border][];

for (int i = 0; i < ChunkData.verticies + 2 * border; i++)
{
    currentChunkArray[i] = new float[ChunkData.verticies + 2 * border];
}
        
for (int y = 0; y < ChunkData.islandSize; y++)
{
    for (int x = 0; x < ChunkData.islandSize; x++)
    {
        for (int i = 0 ; i < ChunkData.verticies + 2 * border; i++)
        {       
            float[] sourceArray = borderedIslandMap[i + y * ChunkData.verticies - y];
            int sourceIndex = x * ChunkData.verticies - x;
            float[] destinationArray = currentChunkArray[i];
            int destinationIndex = 0;
            int length = ChunkData.verticies + 2 * border;

            Array.Copy(sourceArray, sourceIndex, destinationArray, destinationIndex, length);
        }
            
        ChunkData.FalloffMaps.Add(new Vector2(y, x), currentChunkArray);
C# 数组 字典 参考 个引用

评论

1赞 Joel Coehoorn 4/12/2022
是的,数组是引用类型,因此将它们传递给方法会传递引用。C# 一直都是这样。它通常被视为一项功能,而不是需要克服或解决的问题。
0赞 robin bosch 4/12/2022
现在,我只是通过使用“new”关键字再次声明 currentChunkArray 完成,为每个循环提供了一个新的内存位置,但这并不像一个干净的方法。

答: 暂无答案