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

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

非语言标识符,字节精确匹配。
非语言标识符,与大小写无关,尤其是存储在大多数Microsoft Windows系统服务中的一条数据。
与文化无关的数据,这些数据在语言上仍然有意义。
需要当地语言习惯的数据。

鉴于此,我想知道在公共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 对象执行例如不区分大小写的序数比较的信息?

参考方案

您可以始终使用经过修改的匈牙利语约定(我指的是Joel-approved kind):

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

“ i”和“ s”在这里具有一致的含义,即使根据上下文它们可以表示两种不同的含义,这也是有用的属性。 “ i”表示“不在乎”(关于案例/文化),“ s”表示“在乎”。

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

Java string.hashcode()提供不同的值 - java

我已经在这个问题上停留了几个小时。我已经注释掉所有代码,认为这与数组超出范围有关,但是这种情况仍在发生。我正在尝试使用扫描仪从文件中读取输入,存储数据并稍后使用哈希码获取该数据。但是哈希值不断变化。public static void main(String[] args) { //only prior code is to access data char…

string.split(“ _(B”) - java

基本上,这行代码行不通,我不确定原因: String[] stringHolder = string.split("_(B"); 我收到此错误:索引3附近的未封闭组此行代码有效: String[] stringHolder = string.split("_B"); 因此,这使我相信它是由“(”引起的。有人可以告诉我如…

LeetCode题解计算机为什么是基于二进制的?

可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制

LeetCode题解统计城市的所有灯泡

这个是我刚毕业的时候,一个真实的面试题,这是一个开放题。题目描述:想办法,将一个城市的所有灯泡数量统计出来。题解:费米估算法1、如果某个城市常驻人口有1000万2、假设每5人居住在一套房里,每套房有灯泡5只,那么住宅灯泡共有1000万只3、假设公众场所每10人共享一只灯泡,那么共有100万只4、主要的这两者相加就得出了1100万只当然实际上这是估算的,具体应…

LeetCode题解黑白圆盘

一个圆盘被涂上了黑白二色,两种颜色各占一个半圆。圆盘以一个未知的速度、按一个未知的方向旋转。你有一种特殊的相机可以让你即时观察到圆上的一个点的颜色。你需要多少个相机才能确定圆盘旋转的方向?题解:可以用一个相机即可