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

本文关键字:编译 错误 NET-FindIndex 列表 扩展 | 更新日期: 2023-09-27 18:27:19

在.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;
        }  

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

谓词采用TerrainType,但列表是List<int>。谓词类型取决于列表类型。听起来你的瓷砖包应该实际上是一个List<TerrainType>,在这一点上它应该可以工作。

但是:

  • 我通常建议而不是源自List<int>。更喜欢组合而不是继承——我怀疑最好让你的瓷砖包类型包含List<T>
  • 遵循.NET命名约定:不要用C作为类的前缀,并使枚举值仅为PascalCased,就像FungusSwamp而不是TT_FUNGUS_SWAMP一样
  • 您的方法体可以简化为:

    return type == TerrainType.FungusSwamp;