从抽象集合到具体集合的强制转换¶
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
将抽象集合强制转换为具体实现是一种不好的做法。这会使代码变得脆弱,因为以后更难以更改正在使用的实现。
建议¶
请考虑使用抽象集合的方法并删除强制转换。
示例¶
此示例展示了如何将 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;
}
}
参考¶
C# Corner,基于 C# 接口的开发。
常见弱点枚举:CWE-485。