CA1023背后的原因是什么?

Jam*_*ass 8 c# code-analysis

CA1023:索引器不应该是多维的

索引器(即索引属性)应使用单个索引.多维索引器可以显着降低库的可用性.如果设计需要多个索引,请重新考虑该类型是否表示逻辑数据存储.如果没有,请使用方法.

要修复违反此规则的行为,请将设计更改为使用单个整数或字符串索引,或使用方法而不是索引器.

这对我来说似乎很奇怪,为什么这会对任何事情产生重大影响?除了使多维索引更不直观之外?

Change the design to use a string?用它做什么?在另一端解析数字并失去强打字?

有人可以告诉我为什么多维索引器有问题吗?

Ani*_*Ani 5

如果设计需要多个索引,请重新考虑该类型是否表示逻辑数据存储.如果没有,请使用方法.

问题是索引器不能被特别命名(除了@volpav注释,用于与本身不支持它们的语言接口 - 默认情况下,它们被调用Item),而方法必须是.这意味着如果客户端没有立即明显("表示逻辑数据存储"),则可能在猜测索引器的含义时遇到问题.如果索引器具有多个参数和/或存在索引器的多个重载,则这尤其令人烦恼.当然,命名索引器参数可以帮助解决问题(虽然索引器本身不能在C#中特别命名),但考虑到方法可以暗示返回值的含义以及方法本身名称中的参数(考虑GetCustomersByCountryAndAge vs this [string,int]).这在浏览源代码时极大地提高了可读性.

为索引器编写的精心编写的XML文档也会有所帮助.

要修复违反此规则的行为,请将设计更改为使用单个整数或字符串索引

这个措辞较差的句子似乎是建议结合观察到int和string是索引器最常见的参数类型.它应该只是"改变设计以使用单独的索引".