我有以下枚举:
public enum Materials { Wood, Stone, Earth, Water, Lava, Air }
Run Code Online (Sandbox Code Playgroud)
现在我有3个材料我可以走路(木石土)和3个不可走路(水熔岩空气)
我想比较一个标志是否是三个中的一个.
目前,我就是这样做的:
Materials myMat = Materials.Earth;
if ( myMat == Materials.Earth || myMat == Materials.Wood || myMat == Materials.Stone)
{
I can walk on myMat...
}
Run Code Online (Sandbox Code Playgroud)
是不是可以创建一个新的标志,如Materials.Walkable,它将包括这三种材料,所以我可以使用
if ( myMat == Materials.Walkable )
Run Code Online (Sandbox Code Playgroud)
如果可以,我该怎么做?
提前致谢 ;)
Ani*_*Ani 13
您可以创建一个扩展方法:
public static bool IsWalkable(this Materials myMat )
{
return myMat == Materials.Earth || myMat == Materials.Wood || myMat == Materials.Stone;
// alternatively:
return new[] { Materials.Earth, Materials.Wood, Materials.Stone }.Contains(myMat);
}
Run Code Online (Sandbox Code Playgroud)
并将其用作:
Materials myMat = ...
bool isMyMatWalkable = myMat.IsWalkable();
Run Code Online (Sandbox Code Playgroud)
如果你愿意,你也可以使用[Flags]枚举:
[Flags]
public enum Materials
{
None = 0,
Wood = 1,
Stone = 1 << 1,
Earth = 1 << 2,
Water = 1 << 3,
Lava = 1 << 4,
Air = 1 << 5,
Walkable = Wood | Earth | Stone
}
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
Materials myMat = ..
bool isMyMatWalkable = (myMat & Materials.Walkable) != Materials.None;
Run Code Online (Sandbox Code Playgroud)