在.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 bag 的类中定义的
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;
关于c# - .NET - 扩展列表类中的 FindIndex() 编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9656453/