TextInfo.ToTitleCase对所有CAPS字符串的预期效果不正常

Nim*_*van 38 .net c# vb.net

我试图用TextInfo.ToTitleCase一些名字转换为正确的案例.它适用于小写和混合大小写的字符串,但对于所有大写字符的字符串,它按原样返回输入字符串.
MSDN文档中没有提到任何有关此行为的信息,任何见解?

Mik*_*son 75

来自MSDN文档:

备注通常,标题大小写将单词的第一个字符转换为大写,其余字符转换为小写.但是,此方法目前不提供适当的大小写来转换完全大写的单词,例如首字母缩略词.下表显示了该方法呈现多个字符串的方式.

所以这是预期的行为.如果字符串全部为大写,则可以首先小写字符串,然后在其上运行ToTitleCase.

  • @Nims——在你迟来的辩护中,[当前]文档并没有说 ToTitleCase 不会全部大写。我的第一印象是它*不会忽略*所有大写字母并且无论如何都会出现标题大小写。哎呀。是的`textInfo.ToTitleCase(strAllCaps.ToLower())`。 (3认同)
  • 目前的文档还说"我们保留在未来使这个API变慢的权利." 得爱微软了!(: (2认同)

Jon*_*eet 8

我怀疑这是因为所有首都的词汇都应该是缩写,例如美国.

例如,你不会期望"地震袭击美国"改为"地震袭击美国"你会吗?

  • 那么这是一个错误。Unicode 指定“USA”->“Usa”。编辑:好的,这不是一个错误,正如文档中提到的那样,而是令人惊讶的行为。 (2认同)

Kan*_*kan 7

MSDN 文档说:

通常,标题大小写将单词的第一个字符转换为大写,其余字符转换为小写。但是,完全大写的单词(例如首字母缩略词)不会被转换。

所以它按预期工作。尝试TextInfo.ToTitleCase(TextInfo.ToLowerCase("STRINGINCAPS"))

喜欢:

string TitleCaseString;
TextInfo myTI = new CultureInfo("en-US",false).TextInfo;
TitleCaseString = myTI.ToTitleCase(myTI.ToLowerCase("STRINGINCAPS"));
Run Code Online (Sandbox Code Playgroud)