如何在c#中创建引用列表或数组?

如何在c#中创建引用列表或数组?,c#,reference,pass-by-reference,ref,C#,Reference,Pass By Reference,Ref,如何创建一个列表或数组,其中每个元素都使用ref关键字,这样,如果值更改,列表仍将指向原始引用指向的内存中的新位置 编辑:我试图创建许多对象,其唯一目的是保存对不同类别的其他对象的引用。从静态构造函数中查看以下代码: normal = new Type("Normal", new Type[]{ghost}, new Type[]{rock, steel}, new Type[]{}); fighting = new Type ("Fighting", new Type[]{ghost}, ne

如何创建一个列表或数组,其中每个元素都使用ref关键字,这样,如果值更改,列表仍将指向原始引用指向的内存中的新位置

编辑:我试图创建许多对象,其唯一目的是保存对不同类别的其他对象的引用。从静态构造函数中查看以下代码:

normal = new Type("Normal", new Type[]{ghost}, new Type[]{rock, steel}, new Type[]{});
fighting = new Type ("Fighting", new Type[]{ghost}, new Type[]{flying, poison, bug, psychic, fairy}, new Type[]{normal, rock, steel, ice, dark});
flying = new Type ("Flying", new Type[]{}, new Type[]{rock, steel, electric}, new Type[]{bug, grass, fairy});
ground = new Type ("Ground", new Type[]{flying}, new Type[]{bug, grass}, new Type[]{poison, rock, steel, fire, electric});
rock = new Type ("Rock", new Type[]{}, new Type[]{fighting, ground, steel}, new Type[]{flying, bug, fire, ice});
bug = new Type ("Bug", new Type[]{}, new Type[]{fighting, flying, poison, ghost, steel, fire, fairy}, new Type[]{grass, psychic, dark});
ghost = new Type ("Ghost", new Type[]{normal}, new Type[]{dark}, new Type[]{ghost, psychic});
steel = new Type ("Steel", new Type[]{}, new Type[]{steel, fire, water, electric}, new Type[]{rock, ice, fairy});
fire = new Type ("Fire", new Type[]{}, new Type[]{ref Rock, ref Fire, ref Water, ref Dragon}, new Type[]{Bug, Ice, Steel, Grass});//TODO: move Ice back to the end
water = new Type ("Water", new Type[]{}, new Type[]{water, grass, dragon}, new Type[]{ground, rock, fire});
grass = new Type ("Grass", new Type[]{}, new Type[]{flying, poison, bug, steel, fire, grass, dragon}, new Type[]{ground, rock, water});
electric = new Type ("Electric", new Type[]{ground}, new Type[]{grass, electric, dragon}, new Type[]{flying, water});
psychic = new Type ("Psychic", new Type[]{dark}, new Type[]{steel, psychic}, new Type[]{fighting, poison});
ice = new Type ("Ice", new Type[]{}, new Type[]{steel, fire, water, ice}, new Type[]{flying, ground, grass, dragon});
dragon = new Type ("Dragon", new Type[]{fairy}, new Type[]{steel}, new Type[]{dragon});
dark = new Type ("Dark", new Type[]{}, new Type[]{fighting, dark, fairy}, new Type[]{ghost, psychic});
fairy = new Type ("Fairy", new Type[]{}, new Type[]{poison, steel, fire}, new Type[]{fighting, ice, dragon});
问题是数组中的值仅适用于在当前创建对象之前创建的对象。因此,我希望通过ref传递每个数组的成员,以便它们在被赋值后将指向内存中的正确位置。

您是否正在处理值类型并希望它们是引用类型


如果是这样,您必须做一些不愉快的事情,比如将值类型包装到类中,或者做一些事情并将其作为引用类型传递。

您应该将其设置为两步过程,而不是一步,以便获得对对象的实际引用

您的
类型
应具有如下界面:

public class Type
{
     public Type(string key)
     {
        // store key         
     }

     public void Init(Type[] first, Type[] second, Type[] third)
     {
         // store or handle the parameters
     }
}
现在您的静态构造函数可以这样运行

normal = new Type("Normal");
rock = new Type ("Rock");
ghost = new Type ("Ghost");
steel = new Type ("Steel");
// other stuff here

normal.Init(new Type[]{ghost}, new Type[]{rock, steel}, new Type[]{});
// other inits here

在C#中,数组已经通过引用进行了操作。自从您响应后,我添加了一个编辑,您可以看一下吗?我认为这将有助于使问题更清楚。对不起,C#中的问题是“我如何创建”吗?你确定你在做什么吗?嗯,在代码块之前,所有这些变量都被创建了,但没有给定一个值。我想创建一个包含实际变量引用的列表,这样一旦定义了以下变量,在它们之前定义的变量将指向原始变量现在指向的相应对象,而不是像现在那样指向null,因为变量通过值传递时为null。我想要的和使用ref关键字完全一样,我只想存储它们的列表。@Dustuu在C#中不能这样做。(可能会使用不安全的指针进行一些黑客攻击,尽管这可能不是最好的方法)@MAV谢谢,很高兴知道。考虑到ref关键字的逻辑,我认为这是有意义的。有点遗憾,它没有按我想的那样工作,但我找到了一个解决方案,所以一切都很好。啊,是的,我曾想过做类似的事情,但如果我能使用原始参考资料,它似乎是多余的。我刚刚完成了这个,非常感谢!