代码之家  ›  专栏  ›  技术社区  ›  Dave

在公共API中,如何最好地传达字符串参数的用途?

  •  2
  • Dave  · 技术社区  · 14 年前

    根据中发布的指南 New Recommendations for Using Strings in Microsoft .NET 2.0 ,字符串中的数据可能显示以下行为类型之一:

    1. 字节完全匹配的非语言标识符。
    2. 一种非语言标识符,其中大小写无关,尤其是存储在大多数微软Windows系统服务中的一段数据。
    3. 文化上不可知的数据,在语言上仍然是相关的。
    4. 需要当地语言习惯的数据。

    考虑到这一点,我想知道在公共API中通信期望的字符串参数行为的最佳方法。我找不到答案 Framework Design Guidelines .

    考虑以下方法:

       f(string this_is_a_linguistic_string)
       g(string this_is_a_symbolic_identifier_so_use_ordinal_compares)
    

    变量命名和XML文档是我能做的最好的吗?我可以以某种方式使用属性来标记字符串的需求吗?

    现在考虑以下情况:

       h(Dictionary<string, object> dictionary)
    

    请注意,字典实例是由调用方创建的。如何沟通被叫方希望字典所持有的IEqualityComparer<string>对象执行不区分大小写的顺序比较?

    2 回复  |  直到 11 年前
        1
  •  1
  •   Aaronaught    14 年前

    你可以一直使用修改过的匈牙利惯例(我的意思是 Joel-approved kind ):

    • 前缀 cs 对于 区分大小写 (非语言)
    • 前缀 ci 对于 不区分大小写 (非语言)
    • 前缀 cil 对于 文化不变语言
    • 前缀 csl 对于 文化特定语言 文化敏感语言

    “i”和“s”在这里的含义是一致的,尽管它们可以表示两种不同的东西,这取决于上下文,这是一个有用的属性。我的意思是“不关心”(关于案例/文化),而“S”的意思是“关心”。

    当然,作为免责声明,我从不这样做,因为对于我处理的绝大多数字符串,这些类型的字符串之间的区别充其量是模糊的。但是,如果它们对您有语义意义,那么这将是依赖XML文档的合理替代方法。尤其是当您将它们用作私有方法的参数时,大多数人不会为这些方法编写XML文档。

        2
  •  5
  •   GvS    14 年前

    使用文档语法:

    /// <param name="dictionary">
    /// ... string is case sensitive ordinal ...
    /// </param>