Перечисление через список игровых объектов, сравниваемых с группой Enums - PullRequest
0 голосов
/ 11 июля 2019

Я хочу найти компактный способ выполнить следующее, используя встроенную в C # функциональность перечисления (в библиотеке коллекций) .

1. Перечислять через список gameObjects, получая имя текущего элемента на каждой итерации

2. с этим элементом, сравните имя строки с группой Enums, которую я создал для удобства (чтобы избежать орфографических ошибок в строках)

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 ]

1 голос
/ 11 июля 2019

Я бы начал с получения списка enum в виде массива.Чтобы код выглядел лучше (но немного медленнее), мы можем преобразовать этот массив в список и вызвать для него имя 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();

В вашем реальном коде получите массив list / name при запуске, не делайте этого с каждым вызовом, так как он использует отражение под капотом, так что это немного дороже.

0 голосов
/ 12 июля 2019

Для дальнейшего моего комментария об использовании Linq

string comparison = "YourEnum";
List<GameObject> matches = objects.Where(x => x.name == comparison).ToList();

matches в вышеприведенном примере будет GameObjects, который соответствует предоставленному вами перечислению, которое вы можете затем сделать так, как хотитеделать, если есть совпадения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...