为什么ToUpper()在应用于“8”时不返回“*”?

时间:2011-06-09 19:07:48

标签: c#

string s = "h";
s = s.ToUpper();

返回"H"

string s = "8";
s = s.ToUpper();

返回"8"

这不应该返回"*"吗?

5 个答案:

答案 0 :(得分:93)

不,不应该。 ToUpper()并不代表WithShiftKeyOnAnInternationalASCIIKeyboard()。没有大写8,因为8是数字,而不是字母

当然,这是粗略过度简化(仅数字不能自动在角色中创建某个字符设置无壳),但它可能是你要求的,所以我会留下它。

答案 1 :(得分:28)

因为没有大写8

仅仅因为您使用的特定键盘与*在同一个键上有8,并不意味着所有键盘都可以。有些语言没有大写字母 - ToUpper应该返回哪些?

String.ToUpper()

  

此方法使用当前区域性的大小写规则将当前实例中的每个字符转换为大写的等效字符。如果一个字符没有大写的等价物,则它在返回的字符串中保持不变。

答案 2 :(得分:6)

真正的答案是因为与en-US的CultureInfo相关联的TextInfo没有将“*”定义为“8”的大写。

可以扩展TextInfo,覆盖toUpper(),并使其按您的意愿工作。

答案 3 :(得分:1)

  1. 数字没有大写字母。
  2. 如果您要使用函数ToUpper()来关注Text: “有8栋楼” 你想得到什么结果? “有8栋建筑物”或“有*建筑物”
  3. Keyboardlayout已本地化,例如在德国键盘上有一个 8

答案 4 :(得分:-1)

仅仅因为按下shift 8来获得*不会使它成为大写值,它只适用于a-z字符。