我如何更改枚举元素内的任何变量?

How do i change any variables inside of a enum element?

这是我的代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
     
public class Item
{
    public Inventory inventory;
    public enum ItemType
    {
        Blocks,
        Potions,
        Weapons,
    }

    public ItemType itemType
    public bool stackable;
     
}

我想做的是仅将枚举 ItemType Blocks 更改为可堆叠,这样我就可以使用将项目添加到列表中,如果项目被阻止,它将是默认设置为可堆叠。

我怎样才能做到这一点?

我试过了ItemTypes.Blocks.stackable = true;但是不行

选项 1:

使用扩展方法确定可堆叠的内容。

public class Item
{
    public Inventory inventory;
    public enum ItemType
    {
        Blocks,
        Potions,
        Weapons,
    }

    public ItemType itemType; // Defaults to Blocks
}

public static class ItemTypeExtensions
{
    public static bool IsStackable(this Item.ItemType type)
    {
        return type == Item.ItemType.Blocks;
    }
}

用法

var item = new Item();
bool isStackable = item.itemType.IsStackable(); // true

item.itemType = Item.ItemType.Potions;
bool isStackable = item.itemType.IsStackable(); // false

选项 2:

当您声明一个枚举值时,它会自动使用默认元素作为值。对于任何枚举,它的值为 0。如果您不给它们赋值(如本例),编译器将为第一个元素分配值 0。因此,您构造枚举的方式 ItemTypes.Blocks 是默认值。您可以在构建 Item 对象时依赖此默认值。

public class Item
{
    public Inventory inventory;
    public enum ItemType
    {
        Blocks,
        Potions,
        Weapons,
    }

    public ItemType itemType; // Defaults to Blocks
    public bool stackable = true; // Set default explicitly (which matches up with blocks)
}

但是,如果您希望布尔值与您的枚举值保持同步,您需要同时设置它们或在项目 class 上创建一个方法将它们设置在一起。

你的问题很poorly-worded所以比较混乱。我将对您的意思做出最好的猜测,并据此提出建议。首先,从 class 中取出 enum。嵌套类型通常不是一个好主意。

 public enum ItemType
 {
     Blocks,
     Potions,
     Weapons
 }

接下来,使用属性公开 public 数据而不是字段。然后您可以提供其他实施细节:

 public class Item
 {
     public Inventory Inventory { get; set; }
     public ItemType ItemType { get; set; }
     public bool IsStackable => ItemType == ItemType.Blocks;
 }

IsStackable 属性 是 read-only 并且它的值是根据 ItemType 属性.[=15 的值动态生成的=]