CodeQL 文档

从抽象集合到具体集合的强制转换

ID: cs/cast-from-abstract-to-concrete-collection
Kind: problem
Security severity: 
Severity: warning
Precision: medium
Tags:
   - reliability
   - maintainability
   - modularity
   - external/cwe/cwe-485
Query suites:
   - csharp-security-and-quality.qls

点击以在 CodeQL 存储库中查看查询

将抽象集合强制转换为具体实现是一种不好的做法。这会使代码变得脆弱,因为以后更难以更改正在使用的实现。

建议

请考虑使用抽象集合的方法并删除强制转换。

示例

此示例展示了如何将 IEnumerable<string> 强制转换为 List<string>。应尽可能避免这种情况。

using System.Collections.Generic;

class Bad
{
    public static void Main(string[] args)
    {
        var names = GetNames();
        var list = (List<string>) names;
        list.Add("Eve");
    }

    static IEnumerable<string> GetNames()
    {
        var ret = new List<string>()
        {
            "Alice",
            "Bob"
        };
        return ret;
    }
}

参考

  • ©GitHub 公司
  • 条款
  • 隐私