C# TextInfo.ToTitleCase不能像预期的那样为所有大写字符串工作

C# TextInfo.ToTitleCase不能像预期的那样为所有大写字符串工作,c#,.net,vb.net,C#,.net,Vb.net,我试图使用TextInfo.ToTitleCase将一些名称转换为大小写。它适用于小写和混合大小写的字符串,但对于所有字符都是大写的字符串,它会按原样返回输入字符串。 MSDN文档中没有提到这种行为,有什么见解吗?我怀疑这是因为所有大写字母中的单词都应该是缩写,例如USA 例如,您不会期望“地震袭击美国”更改为“地震袭击美国”吧?MSDN文档中说: 通常,标题大小写将单词的第一个字符转换为大写,其余字符转换为小写。但是,完全大写的单词(如首字母缩略词)不会被转换 因此,它按预期工作。尝试Text

我试图使用
TextInfo.ToTitleCase
将一些名称转换为大小写。它适用于小写和混合大小写的字符串,但对于所有字符都是大写的字符串,它会按原样返回输入字符串。

MSDN文档中没有提到这种行为,有什么见解吗?

我怀疑这是因为所有大写字母中的单词都应该是缩写,例如USA


例如,您不会期望“地震袭击美国”更改为“地震袭击美国”吧?

MSDN文档中说:

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

因此,它按预期工作。尝试
TextInfo.ToTitleCase(TextInfo.ToLowerCase(“STRINGINCAPS”)

比如:

从文档:

评论 通常,标题大小写会将单词的第一个字符转换为大写,其余字符转换为小写。但是,此方法目前没有提供正确的大小写来转换完全大写的单词,例如首字母缩写词。下表显示了该方法呈现多个字符串的方式


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

这是一个错误。Unicode指定“USA”->“USA”.Edit:好的,这不是一个bug,正如文档中所提到的,而是一个令人惊讶的行为。我应该添加在.net 3.5中更改的措辞,但对这个事实并不清楚。@Nims--在你迟来的辩护中,[current]文档并没有说ToTitleCase不会对所有的大写字母都下蹲。我的第一印象是它不会忽略所有的大写字母,而且会以大写字母命名。哎哟。
textInfo.ToTitleCase(strAllCaps.ToLower())
是的。当前文档还说“我们保留在将来让这个API变慢的权利。”一定要爱微软!(:
string TitleCaseString;
TextInfo myTI = new CultureInfo("en-US",false).TextInfo;
TitleCaseString = myTI.ToTitleCase(myTI.ToLowerCase("STRINGINCAPS"));