c# - 如何忽略 String.ToUpper() 中的撇号?

标签 c# .net

在法国,很多城市的名字中都有撇号。就像“rue de l'église”

我们几乎在每个 UI 部分都使用转换器以完整的大写形式编写它。

但是 string.ToUpper 似乎有一个错误,因为我们得到的是“RUE DE L'église”而不是我们应该得到的“RUE DE L'ÉGLISE”。

你能解释一下为什么吗?无论如何获得预期的结果?

我的转换器是这样的

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value != null)
        {
            var res = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(value.ToString().ToUpper());
            return res;
        }

        return String.Empty;
    }

最佳答案

ToTitleCase() 没有按照您的意愿进行。它将每个单词的第一个字符大写。你想要的只是普通的 string.ToUpper():

Console.WriteLine("rue de l'église".ToUpper());

输出:

RUE DE L'ÉGLISE

ToTitleCase():

Console.WriteLine(CultureInfo.GetCultureInfo("fr-fr").TextInfo.ToTitleCase("rue de l'église"));

输出

Rue De L'église

结合使用 ToTitleCase()ToUpper() 会导致您描述的这种奇怪的行为,因为 ToTitleCase() 会尝试将所有其他字符小写比第一个(根据 documentation ,除了全部大写且被视为首字母缩略词的单词外)

关于c# - 如何忽略 String.ToUpper() 中的撇号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50019150/

相关文章:

c# - 当在创建客户表单中添加客户时,如何更新 MainForm 中的 Datagridview?

c# - 在 Linq 投影中使用方法

.net - WPF - TabControl - 防止选择更改

c# - 以编程方式使用免费代理服务器连接到网站

c# - 从字符串创建强类型 log4net 级别

c# - AutoMapper ProjectTo 继承问题

c# - 创建新实例或仅设置内部变量

.net - .Net 框架中是否有系统错误代码的枚举?

c# - 为什么这个函数更快,为什么它的多个枚举比第一个更快?

c# - 什么会导致 WM_NCHITTEST lParam 溢出 32 位整数?