CA1023背后的原因是什么?

时间:2014-01-06 11:54:09

标签: c# code-analysis

  

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

     

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

     

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

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

Change the design to use a string?用它做什么?在另一端解析数字并输掉强力输入?

有人可以告诉我多维索引器出现问题的原因吗?

1 个答案:

答案 0 :(得分:5)

  

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

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

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

  

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

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