检查列表中整数值的优雅方法

时间:2017-09-12 15:13:37

标签: c# c#-4.0

我有这个基于ID返回怪物对象的方法。

如果ID在某个数组中,则返回定义。

有效!但它看起来有点像黑客。 Ids可能会改变,或者我可能需要一个新的ID列表,而且我认为我现在设置它的方式看起来很糟糕。

有没有办法在代码中的其他地方存储整数,然后只做这样的事情?

if (room.Encounter.Id.MonsterType(dungeonMonsterTypes))

这是我现在的代码:

public static bool MonsterType<T>(this T item, params T[] list)
{
    return list.Contains(item);
}

public static MonsterDefinition GetMonsterDefinition(this Rgame room)
{
    var monster = room.Encounter.MonsterDefinition;
    if (room.Encounter.Id.MonsterType(190, 68, 115, 59, 40, 66, 112, 421))
        return new MonsterDefinition(monster);
    return null;
}

1 个答案:

答案 0 :(得分:1)

使用哈希集 -

HashSet<int> monsterIDs = new HashSet<int>() { 190, 68, 115, 59, 40, 66, 112, 421 };
...
if (monsterIDs.Contains(room.Encounter.Id))
  return new MonsterDefinition(monster);

你也可以使用enum而不是pure int,以便更具可读性。