C# 在数组中传递类引用

C# 在数组中传递类引用,c#,arrays,reference,C#,Arrays,Reference,不知何故,我无法处理一整天的简单场景:/ slotTypes = new InventoryItem[] { _Player.EqiupAmulet, _Player.EqiupArmor, _Player.EqiupBelt, _Player.EqiupBoots, _Player.EqiupCloak, _Player.EqiupArmor, _Player.EqiupGauntlets, _Player.EqiupHelmet }; 这里要存储对InventoryItem公共类的引用;所

不知何故,我无法处理一整天的简单场景:/

slotTypes = new InventoryItem[] { _Player.EqiupAmulet, _Player.EqiupArmor, _Player.EqiupBelt, _Player.EqiupBoots, _Player.EqiupCloak, _Player.EqiupArmor, _Player.EqiupGauntlets, _Player.EqiupHelmet };
这里要存储对InventoryItem公共类的引用;所以,每次我做这样的事情:

InventoryItem _inv = new InventoryItem();
_Player.EqiuipArmor = _inv;
slotTypes[1]和slotTypes[5]现在应该保留对_inv项的引用,但是它们没有,它们保持为空; 我觉得我在这里遗漏了一些合乎逻辑的东西,但几个小时的谷歌搜索并没有帮到我

我已经设法使用'ref'在函数中传递引用,但这并没有解决最初的问题

_Player.EqiupArmor定义为
public inventory项目EqiupArmor

内部球员等级

如果对同一对象实例有两个不同的引用,并且将其中一个引用更改为“指向”另一个实例,这并不意味着另一个引用已更改。另一个引用仍然引用原始实例

比较一下:

object a = new object();
object b = a;  // a and b are references to the same object

a = "something else";
// now a and b refer different objects; b still refers the original object

如果对同一对象实例有两个不同的引用,并且将其中一个引用更改为“指向”另一个实例,这并不意味着另一个引用已更改。另一个引用仍然引用原始实例

比较一下:

object a = new object();
object b = a;  // a and b are references to the same object

a = "something else";
// now a and b refer different objects; b still refers the original object

数组实际上包含对对象的引用。因此,看看您的场景中发生了什么:

  • \u Player.EqiuipArmor
    是空引用
  • slotTypes[0]
    复制此文件并成为另一个空引用
  • \u inv
    引用对象X
  • \u Player.EqiuipArmor
    参考已更改为对象X

  • 现在
    \u Player.EqiuipArmor
    正在引用X,而
    slotTypes[0]
    仍然是空引用。

    数组实际上包含对对象的引用。因此,看看您的场景中发生了什么:

  • \u Player.EqiuipArmor
    是空引用
  • slotTypes[0]
    复制此文件并成为另一个空引用
  • \u inv
    引用对象X
  • \u Player.EqiuipArmor
    参考已更改为对象X

  • 现在
    \u Player.EqiuipArmor
    正在引用X,而
    slotTypes[0]
    仍然是空引用。

    问题是数组正在存储对对象的引用。将
    \u Player.EqiuipArmor
    指定给新对象时,它指向不同的实例,但数组中存储的引用不会更改

    您可以创建一个类,该类接受
    Player
    类并将各种属性作为数组公开:

    public class InvertorySlots
    {
        private Player _Player;
    
        public InventorySlots(Player player)
        { 
        }
    
        public InventoryItem[] GetItems()
        {
            return new InventoryItem[] { 
                  _Player.EqiupAmulet,  
                  _Player.EqiupArmor,  
                  _Player.EqiupBelt,  
                  _Player.EqiupBoots,  
                  _Player.EqiupCloak,  
                  _Player.EqiupArmor,  
                  _Player.EqiupGauntlets,  
                  _Player.EqiupHelmet };
        }
    }
    

    问题是数组正在存储对对象的引用。将
    \u Player.EqiuipArmor
    指定给新对象时,它指向不同的实例,但数组中存储的引用不会更改

    您可以创建一个类,该类接受
    Player
    类并将各种属性作为数组公开:

    public class InvertorySlots
    {
        private Player _Player;
    
        public InventorySlots(Player player)
        { 
        }
    
        public InventoryItem[] GetItems()
        {
            return new InventoryItem[] { 
                  _Player.EqiupAmulet,  
                  _Player.EqiupArmor,  
                  _Player.EqiupBelt,  
                  _Player.EqiupBoots,  
                  _Player.EqiupCloak,  
                  _Player.EqiupArmor,  
                  _Player.EqiupGauntlets,  
                  _Player.EqiupHelmet };
        }
    }