Вы не указано, что именно вы имеете в виду под «более эффективным», так что я буду просто взять на себя смелость интерпретировать это как «легче читать и тип»:
Вы можете заменить свой цикл:
for (int i = 0; i < terrains.Count; i++)
{
if (terrains[i].name == name)
terrains[i].EnableBoundingBox(true);
else
terrains[i].EnableBoundingBox(false);
}
с этим одним:
foreach (var terrain in terrains)
{
terrain.EnableBoundingBox(terrain.name == name);
}
Обратите внимание, что в общем, foreach
петли, вероятно, немного меньше эффективен во время выполнения, чем for
. Но разница, вероятно, крошечная и абсолютно не о чем беспокоиться, кроме как в более экстремальных сценариях реального времени/высокой производительности. С положительной стороны, вы получаете гораздо более простой исходный код.
Кстати, лучше сравнить строки, используя метод string.Equals(string, string, StringComparison)
, потому что это делает более ясным, какую культуру и чувствительность к регистру следует использовать для сравнения.
Как и в другом случае, вы упомянули LINQ. LINQ был бы плохо подходит здесь; позвольте мне вкратце объяснить, почему: теоретически возможно написать пользовательский оператор LINQ ForEach
, который принял бы делегата Action<T>
. Он может быть реализован как цикл foreach
, который вызывает делегат для каждого элемента в исходной последовательности. Затем можно написать следующую Однострочник:
terrains.ForEach(terrain => terrain.EnableBoundingBox(terrain.name == name));
На мой взгляд, простой foreach
петля на самом деле более легко читаемым, даже если он занимает несколько строк кода. Но самое главное, помните, что означает LINQ: «Language-Integrated Query». Выражения LINQ должны запрос данные, а не изменить он (то есть имеет побочные эффекты). Однако пользовательский оператор ForEach
будет касаться побочных эффектов; поэтому он не соответствует парадигме LINQ и не включен в Framework.
(В качестве последнего замечания, мой ответ в основном обзор кода. Если это то, что вы хотели, возможно, Code Review SE сайт, возможно, был более подходящим местом, чтобы разместить Ваш вопрос.)
что тип данных «Территории»? это Перечисляемо? –
Это общий список – tdkr80
@ tdkr80 Рассмотрите вопрос об этом здесь: http://codereview.stackexchange.com/ – random