在公共API中传达字符串参数的目的的最佳方法是什么?

时间:2010-06-02 15:57:26

标签: c# frameworks

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

  1. 非语言标识符,其中字节完全匹配。
  2. 非语言标识符,其中大小写无关紧要,尤其是存储在大多数Microsoft Windows系统服务中的数据。
  3. 与文化无关的数据,仍具有语言相关性。
  4. 需要当地语言习俗的数据。
  5. 鉴于此,我想知道在公共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&lt; string&gt;字典所持有的对象,例如,不区分大小写的序数比较?

2 个答案:

答案 0 :(得分:5)

使用文档语法:

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

答案 1 :(得分:1)

您可以随时使用修改后的匈牙利语约定(我的意思是Joel-approved kind):

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

“i”和“s”在这里具有一致的含义,即使它们可能意味着两种不同的东西,这取决于上下文,这是一个有用的属性。 “我”的意思是“不关心”(关于案例/文化),“s”的意思是“关心”。

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