我发现了与我要问的问题类似的问题,但不幸的是,这些问题与我要解决的问题不太吻合。
我有多个对象,它们的枚举类型称为TypeOfEnum。
object A = TypeOfEnum.Value1,TypeOfEnum.Value2;
object B = TypeOfEnum.Value2;
object C = TypeOfEnum.Value3,TypeOfEnum.Value2;
object D = TypeOfEnum.Value1,TypeOfEnum.Value4;
我要尝试的是比较这四个对象中两个对象的值,如果它们包含,则任何相同的值(例如A和D,但不包括D和B)继续通过代码。如果不是,则跳过结果,并进行新的对象比较。在比较中,它们将始终具有相同的枚举类型,对象将始终包含枚举。
到目前为止,我一直试图将枚举传递给列表,并检查它们是否以字符串而不是整数相交,但是结果却不尽相同。 IE:对象B和对象C将不匹配,但是对象A和C将匹配,而对象D和A将匹配。
我该怎么做?还是不可能?
编辑: 实际的代码直到出现问题的地方: 枚举:
[Flags]
public enum TerrainFlags
{
None = 0,
Land = 1,
Water = 2,
Air = 4,
Snow = 8,
Desert = 16,
Forest = 32,
Mountain = 64
}
添加遇到的敌人
private void AddEnemyAndUpdatePoints(List<Enemy> enemyList, Enemy enemy, ref int points, ref int bonusMoney, Village village)
{
List<string> terrainVillages = new List<string>();
List<string> terrainEnemies = new List<string>();
terrainVillages.Add(Enum.GetName(typeof(TerrainFlags), village.Terrain));
foreach(string terrain in terrainVillages)
Debug.Log("Village "+village.Name+" "+terrain);
terrainEnemies.Add(Enum.GetName(typeof(TerrainFlags), enemy.Terrain));
foreach (string terrain in terrainEnemies)
Debug.Log("enemy: "+enemy.Name+" "+terrain);
if (terrainVillages.Intersect(terrainEnemies).Any())
{
enemyList.Add(enemy);
bonusMoney += enemy.Bounty;
points -= enemy.Points;
Debug.Log("Enemy Added");
}
else
{
Debug.Log("Enemy and Village Terrains did not match, rerolling.");
points -= enemy.Points;
}
请注意,点-=敌人。else语句中的点只是为了防止此问题引起的无限循环,否则可以忽略。
在以下方法中调用AddEnemyAndUpdatePoints方法:
private int BuyPoints(List<Enemy> enemyList, int points, int difficulty, Village village)
{
int bonusMoney = 0;
while (points > 0)
{
var enemy = this.GetEnemyWeighted(EnemyListFunction());
if (difficulty <= 2 && enemy.Points <= 2)
{
AddEnemyAndUpdatePoints(enemyList, enemy, ref points, ref bonusMoney, village);
}
else if (difficulty > 2)
{
AddEnemyAndUpdatePoints(enemyList, enemy, ref points, ref bonusMoney, village);
}
}
return bonusMoney;
}
或多或少,我似乎遇到的问题是,如果一个敌人拥有高山,雪地和空中的地形,当前代码意味着如果只有高山,他们就不会与某物配对。它至少需要雪和山,或者山和空,并且有时最终会变成只有沙漠和森林的敌人。
答案 0 :(得分:2)
[Flags]
public enum Options
{
None = 0,
Option1 = 1,
Option2 = 2,
Option3 = 4,
Option4 = 8
}
您可以使用下面的方法来包含和排除枚举标志。请注意〜(tilda)是排除性的
var condition = Options.Options1 | Options.Options2 | ~Options.Options3