.NET - FindIndex()从扩展列表类编译错误

时间:2012-03-11 15:54:10

标签: c# .net collections

在.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 个答案:

答案 0 :(得分:3)

您的谓词需要TerrainType,但您的列表是List<int>。谓词类型取决于列表类型。听起来你的瓷砖包应该实际上List<TerrainType>,此时它应该有效。

然而:

  • 我通常建议派生自List<int>。首选组合而不是继承 - 我怀疑最好让你的瓷砖包包含一个List<T>
  • 遵循.NET命名约定:不要在您的类前加C前缀,并使您的枚举值仅为PascalCased,如FungusSwamp而不是TT_FUNGUS_SWAMP
  • 您的方法主体可以简化为:

    return type == TerrainType.FungusSwamp;