【问题标题】:What's the reason behind CA1023CA1023背后的原因是什么
【发布时间】:2014-01-06 11:54:09
【问题描述】:

CA1023:索引器不应是多维的

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

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

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

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

谁能给我一些为什么多维索引器有问题的原因?

【问题讨论】:

    标签: c# code-analysis


    【解决方案1】:

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

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

    为您的索引器编写良好的 XML 文档也会有所帮助。

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

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

    【讨论】:

    • 实际上,您可以使用 IndexerNameAttribute 为您的索引器指定一个自定义名称(尽管在 C# 中您不会看到这个)。
    • @volpav:是的,但是像 C# 这样的语言并没有太多用处。事实上,索引器本质上设计为类型上的默认未命名方法。
    • 是的,我完全同意。只是想指出,可以有一个命名为Item 以外的索引器(这方面的一个例子是System.String 中的Chars 索引器)。对不起,我很迂腐:-)
    猜你喜欢
    • 2011-06-20
    • 2018-08-31
    • 2020-01-26
    • 2016-03-31
    • 2021-11-01
    • 2010-10-03
    • 2018-02-28
    • 1970-01-01
    • 2014-10-17
    相关资源
    最近更新 更多