我如何更改枚举元素内的任何变量?
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 的值动态生成的=]
这是我的代码
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 的值动态生成的=]