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

标签 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 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/

相关文章:

python - 在 python 中为非空集合返回 bool 值的推荐方法是什么?

c# - ForeignKeyConstraint.AcceptRejectRule 在 ADO.Net 中的用途?

sorting - Smalltalk 集合

angular - typescript 对象集

.net - 使用 linq 按列索引对 vb.net 中的数据表进行排序

.net - C# 中是否有 Sizzle/jQuery 选择器实现?

c# - 具有 SSL 连接的 RabbitMQ 客户端抛出 SSPI 异常

c# - 扩展方法、T的Func和T的List

c# - 在我更改 javascript 中的 div 属性之前,如何在 c#.net 中获取 div 显示属性

c# - BooleanToVisibilityConverter 无法正常工作