【问题标题】:Looking for String operations edge cases. What do I need to test?寻找字符串操作的边缘情况。我需要测试什么?
【发布时间】:2009-01-12 19:45:07
【问题描述】:

我正在进入我的绳索(String 的更具可扩展性的版本)实施的最后阶段。显然,我希望所有操作都尽可能给出与Strings 上的操作相同的结果。

为序数操作执行此操作非常简单,但我担心正确实施文化敏感操作。特别是因为我只知道两种语言,并且在这两种语言中,文化敏感操作的行为与序数操作完全相同!

那么有什么具体的事情我可以测试并至少让我确信我做事正确吗?例如,当忽略德语中的大小写时,我知道 ß 等于 SS;关于土耳其语中带点和不带点的 i。

【问题讨论】:

    标签: c# string globalization cultureinfo


    【解决方案1】:

    代理对,如果您打算支持它们 - 包括无效组合(例如,只有一个的一部分)。

    如果您正在进行编码和解码,请确保您保留足够的状态以应对任意二进制数据块进行解码,这些数据块可能会在字符中途结束,剩余的一半在下一个字符中。

    【讨论】:

    • 没有编码/解码,但代理可能最终成为一个真正的问题。
    【解决方案2】:

    土耳其语测试是我所知道的最好的 :)

    【讨论】:

      【解决方案3】:

      您应该模仿 String 方法的实现,并使用核心库为您执行此操作。很难考虑每一种文化的每一个可能的方面。与其重新发明轮子,不如在 String 方法上使用反射器并查看内部调用。例如 String.Compare 使用 CultureInfo.CurrentCulture.CompareInfo.Compare 来比较当前文化中的 2 个字符串。

      【讨论】:

      • 是的,这就是计划。但是,CultureInfo 方法采用字符串。这意味着我需要将我的绳子的一部分转换成绳子。问题是,我是否有足够的信息知道哪一部分?
      • 比如检查EndsWith(string suffix)时,取我的绳子的最后一个suffix.Length个字符就够了吗?可能并非总是如此。取最后一个suffix.Length + 5个字符就够了吗?可能是的。
      • 你不需要知道,只需将绳子字符串传递给相应的 CultureInfo 方法即可: CultureInfo.CurrentCulture.CompareInfo.IsSuffix(rope.ToString(), suffix, CompareOptions.None); // 取自 String.EndsWith
      • 好吧,为每个此类操作将整个 Rope 转换为字符串会降低性能和实现 Rope 的大部分意义。
      猜你喜欢
      • 2011-11-03
      • 2018-09-19
      • 1970-01-01
      • 1970-01-01
      • 2021-06-14
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      相关资源
      最近更新 更多