扩展列表类中的.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;
}
谓词采用TerrainType
,但列表是List<int>
。谓词类型取决于列表类型。听起来你的瓷砖包应该实际上是一个List<TerrainType>
,在这一点上它应该可以工作。
但是:
- 我通常建议而不是源自
List<int>
。更喜欢组合而不是继承——我怀疑最好让你的瓷砖包类型包含List<T>
- 遵循.NET命名约定:不要用
C
作为类的前缀,并使枚举值仅为PascalCased,就像FungusSwamp
而不是TT_FUNGUS_SWAMP
一样 -
您的方法体可以简化为:
return type == TerrainType.FungusSwamp;