.NET - Ошибка компиляции FindIndex () из класса Extended List - PullRequest
2 голосов
/ 11 марта 2012

В .Net / C # у меня есть класс, производный от List.Когда я пытаюсь использовать член FindNextIndex этого производного класса, я получаю ошибки компиляции, как показано ниже.

Ошибка 3 Аргумент 1: невозможно преобразовать из «группы методов» в «System.Predicate»

Ошибка 2 У наилучшего перегруженного метода совпадения для 'System.Collections.Generic.List.FindIndex (System.Predicate)' есть недопустимые аргументы

Ниже приведен упрощенный код.

class CTileBag:List<int>
{
    ...
}

Тогдапозже я пытаюсь использовать его в другом классе

CTileBag c = new CTileBag();
int idx = c.FindIndex(IsSwamp);

И IsSwamp определен в классе, в котором я использую мешок CTile, как

private static bool IsSwamp(TerrainType type)
        {
            if (type == TerrainType.TT_FUNGUS_SWAMP)
                return true;
            return false;
        }  

1 Ответ

3 голосов
/ 11 марта 2012

Ваш предикат принимает TerrainType, но ваш список - List<int>.Тип предиката зависит от типа списка.Похоже, ваша сумка для плиток должна на самом деле быть List<TerrainType>, и в этот момент она должна работать.

Однако:

  • Я бы обычно предложил не , производное от List<int>.Предпочитаю композицию, а не наследование - я подозреваю, что было бы лучше сделать так, чтобы ваш пакет плиток типа содержал a List<T>.
  • Следуйте соглашениям именования .NET: не добавляйте префиксы к классам C и сделайте ваши значения перечисления просто PascalCased, например FungusSwamp вместо TT_FUNGUS_SWAMP.
  • Ваше тело метода может быть упрощено до:

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