通过与一组枚举进行比较的游戏对象列表进行枚举

时间:2019-07-11 02:21:05

标签: c# unity3d

我希望找到一种紧凑的方式来使用c#内置的枚举功能完成以下任务 (位于“收藏夹”库中)

1。。列举游戏对象列表,以获取每次迭代时当前物品的名称

2。与该项目,将字符串名称与我为方便起见而创建的一组枚举进行比较(以避免字符串中的拼写错误)

3。。如果名称与至少一个枚举匹配,则返回true并执行内容

在编写代码时,我经常会看到诸如 IList <> IEnumerable <> 之类的关键字,并希望更好地理解它们。

伪代码

foreach(GameObject item in myGameObjectList)
{
   if(item.name.ToLower() == nameof(IEnumerable<MyEnums>(out match /*does the string match?*/))
   {
     //this code will execute if the item in the list has a name matching atleast one of the enums
   }
}

2 个答案:

答案 0 :(得分:1)

我将从获取枚举列表作为数组开始。为了使代码看起来更好(但稍微慢一点),我们可以将该数组转换为列表,然后为每个名称调用Contains。参见以下示例:

 string[] names=System.Enum.GetNames(typeof(MessageType)); 
 List<string> namesList=new List<string>(names); // to be able to use contain

 foreach(GameObject item in myGameObjectList)
      if(namesList.Contains(item.name.ToLower())
          DoStuff();

在您的实际代码中,请在开始时获取列表/名称数组,不要在每次调用时都这样做,因为它在后台使用了反射功能,因此有点贵。

答案 1 :(得分:0)

进一步说明我对使用Linq

的评论
string comparison = "YourEnum";
List<GameObject> matches = objects.Where(x => x.name == comparison).ToList();
上例中的

matches将是GameObjects,它们与您提供的枚举匹配,如果有匹配项,则可以执行您希望做的事情。