C# 比较相同枚举类型的对象的枚举

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; 我试图做的是比较这四个对象

我发现了与我将要问的问题类似的问题,但不幸的是,这些问题并不完全符合我的意图

我有多个枚举类型为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),则继续执行代码。如果没有,则跳过结果并执行新的对象比较。在比较中,它们将始终具有相同的枚举类型,对象将始终包含枚举

到目前为止,我试图将枚举传递给列表,并检查它们是否以字符串而不是整数的形式相交,但结果好坏参半。即:对象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