C# 比较相同枚举类型的对象的枚举
我发现了与我将要问的问题类似的问题,但不幸的是,这些问题并不完全符合我的意图 我有多个枚举类型为TypeOfEnum的对象C# 比较相同枚举类型的对象的枚举,c#,C#,我发现了与我将要问的问题类似的问题,但不幸的是,这些问题并不完全符合我的意图 我有多个枚举类型为TypeOfEnum的对象 object A = TypeOfEnum.Value1,TypeOfEnum.Value2; object B = TypeOfEnum.Value2; object C = TypeOfEnum.Value3,TypeOfEnum.Value2; object D = TypeOfEnum.Value1,TypeOfEnum.Value4; 我试图做的是比较这四个对象
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),则继续执行代码。如果没有,则跳过结果并执行新的对象比较。在比较中,它们将始终具有相同的枚举类型,对象将始终包含枚举
到目前为止,我试图将枚举传递给列表,并检查它们是否以字符串而不是整数的形式相交,但结果好坏参半。即:对象B和对象C将不匹配,但对象A和C将匹配,对象D和A将匹配
我该怎么做?还是不可能
编辑:
问题所在的实际代码:
枚举:
添加要遭遇的敌人:
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;
}
private void AddEnemyAndUpdatePoints(列出enemyList、敌军、ref int points、ref int bonusMoney、村庄)
{
List terrainVillages=新列表();
List TERRAINEEMIES=新列表();
terrainVillages.Add(Enum.GetName(typeof(TerrainFlags),village.Terrain));
foreach(地形中的字符串地形)
Debug.Log(“村庄”+村庄名称+“”+地形);
添加(Enum.GetName(typeof(terrainflaggs),敌方地形));
foreach(地形中的线状地形)
Debug.Log(“敌人:+敌人.名称+”+地形);
if(terrainVillages.Intersect(terrainEnemies.Any())
{
enemyList.Add(敌人);
bonusMoney+=敌人。赏金;
点数-=敌人点数;
调试日志(“添加的敌人”);
}
其他的
{
Log(“敌人和村庄的地形不匹配,重新滚动”);
点数-=敌人点数;
}
请注意,else语句中的points-=敌军。points只是为了防止此问题导致的无限循环,否则可以忽略
在以下方法中调用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;
}
私人整数购买点(列出enemyList、整数点、整数难度、村庄)
{
int bonusMoney=0;
而(点数>0)
{
var敌方=this.GetEnemyWeighted(EnemyListFunction());
如果(困难)
您可以使用下面的方法包括和排除枚举标志。请注意,~(tilda)用于排除
var condition = Options.Options1 | Options.Options2 | ~Options.Options3
您可以使用下面的方法包括和排除枚举标志。请注意,~(tilda)用于排除
var condition = Options.Options1 | Options.Options2 | ~Options.Options3
你能发布一些真正的C#吗?你发布的内容非常不清楚。是的,请发布你遇到问题的实际代码,以便我们可以提供帮助。请发布实际代码,可能还有你想要的结果的伪代码。编辑。为了清晰起见,一些变量被重命名,如果它看起来有点零碎,那么很抱歉。你能发布一些真正的C#吗?你发布的内容非常不规则ear。是的,请发布您遇到问题的实际代码,以便我们可以提供帮助。请发布实际代码,可能还有您想要的结果的伪代码。已编辑。为了清晰起见,某些变量已重命名,如果它看起来有点零碎,请道歉。为了排除,您需要使用notted值(即&~options.options3
而不是|~options.options3
)对于排除,您需要使用NOTED值(即&~options.options3
而不是|~options.options3
)
var condition = Options.Options1 | Options.Options2 | ~Options.Options3