在.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;
}
答案 0 :(得分:3)
您的谓词需要TerrainType
,但您的列表是List<int>
。谓词类型取决于列表类型。听起来你的瓷砖包应该实际上是List<TerrainType>
,此时它应该有效。
然而:
List<int>
。首选组合而不是继承 - 我怀疑最好让你的瓷砖包包含一个List<T>
。C
前缀,并使您的枚举值仅为PascalCased,如FungusSwamp
而不是TT_FUNGUS_SWAMP
。您的方法主体可以简化为:
return type == TerrainType.FungusSwamp;