美文网首页
Effective C#笔记 - 字符串使用

Effective C#笔记 - 字符串使用

作者: Francis_Rose | 来源:发表于2019-12-12 19:37 被阅读0次

    目前通用的使用格式字符串都是使用String.Format()函数来完成的,如:

    int old = 29;
    var str = string.Format("My Age: {0}", old);
    

    当需要的参数比较多时,比较容易因为参数位置而引起错误,因为格式字符串的序号与params数组的位置要对应,不管是写代码的人还是阅读代码的人,都会比较费劲的确认字符串是不是按照正确的顺序排列,毕竟手工的操作,总是犯错会多一点。

    在C# 6.0时,提供了内插字符串(Interpolated String)的语法糖,内插字符串以$开头,它不像传统的格式字符串那样把序号放在一对花括号里面,并且其只带params数组中的对应元素,而是可以直接在花括号里面编写C#表达式,如:

    int old = 29;
    var str = $"My Age: {old}";
    

    在处理字符串时,有时候会需要对浮点数等按指定格式显示,如显示两位有效数字等,以前用string.Format()时候也有,如:

    var mathDesc = string.Format("PI's value = {0: F2}", Math.PI);
    

    这么好用的东西,内插字符串也少不了的:

    var mathDesc2 = $"PI's value = {Math.PI.ToString("F2")}";
    

    或者:

    var mathDesc2 = $"PI's value = {Math.PI: F2}";
    

    使用ToString()函数转换为数据,是因为字符串内插操作所生成的代码会调用参数为params对象数组的格式化方法,如果参数是值类型,必须自动转成Object类型才行,这样就会存在装箱操作,如果代码调用频繁,很容易成为性能瓶颈。

    内插字符串机制还有很多其他的功能,只要是有效的C#表达式,就可以在字符串的花括号里面。如:

    var info = $"The name is {test?.MyName ?? "Name is missing"}";
    

    这样可以提供很灵活的使用方法,出错的概率也降低很多。

    文本的显示通常也需要做本地化的处理,C#提供了对不同区域文本支持的机制。FormattableString提供了这样的方便,FormattableString会采用特定的区域和语言设置,然后通过string.Format()方法做出转换。

           public static string ToGerman(FormattableString src)
           {
               return string.Format(null,
                                    System.Globalization.CultureInfo.CreateSpecificCulture("de-de"),
                                    src.Format,
                                    src.GetArguments());
           }
    

    相关文章

      网友评论

          本文标题:Effective C#笔记 - 字符串使用

          本文链接:https://www.haomeiwen.com/subject/mootnctx.html