motkot
@motkot
Программирование C#.

Как сделать из этого метода нормальный код?

Как из этого сделать нормальный, красивый, читаемый и вообще самый лучший код?

PS Добавил C# в тег, так как особые знания Unity тут не нужны

public List<Cell> CalculateVariants(List<Vector2> movevariants, List<Vector2> attackvariants)
    {
        var variants = new List<Cell>();

        foreach (Vector2 offset in movevariants)
        {
            if (GridRepository.Cells.Find(cell => cell.Position == cell.Position + offset && cell.Unit == null) != null)
            {
                variants.Add(GridRepository.Cells.Find(cell => cell.Position == cell.Position + offset && cell.Unit == null));
            }
        }

        foreach (Vector2 offset in attackvariants)
        {
            if (GridRepository.Cells.Find(cell => cell.Position == cell.Position + offset && cell.Unit != null) != null)
            {
                variants.Add(GridRepository.Cells.Find(cell => cell.Position == cell.Position + offset && cell.Unit == null));
            }
        }

        return variants;
    }
  • Вопрос задан
  • 171 просмотр
Решения вопроса 2
GavriKos
@GavriKos Куратор тега Unity
Избавиться от дубликатов в виде Find, как минимум. Как можно больше кешировать.
Ответ написан
vabka
@vabka Куратор тега C#
Токсичный шарпист
Код в целом норм, если не упарываться в Linq.
Использовать linq не советую, тк он заметно медленнее и потребляет больше памяти, чем циклы.

Если рефакторить, то целиком, включая GridRepository.
Например можно зная текущую клетку и оффсет найти за O(1) все нужные клетки и отбросить занятые.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
samodum
@samodum
Какой вопрос - такой и ответ
LINQ используй
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы