美文网首页
字符串的使用经验

字符串的使用经验

作者: DotNet患者 | 来源:发表于2017-08-23 16:40 被阅读0次

    我根据平时的使用经验,总结了字符串的使用经验,记录如下。

    字符串是不可变的

    修改字符串时,修改的不是字符串本身,.net会在内存创建新的字符串,所以频繁的操作字符串时要使用StringBuilder类,避免程序报AccessViolationException这种很难定位的异常。

    //这种操作会在内存中生成大量的字符串,最好不要这样操作
    string sentence = "this ";
    sentence += "is ";
    sentence += "a ";
    sentence += "bad ";
    sentence += "using ";
    sentence += "case";
    
    //使用StringBuilder类操作字符串
    var strBuilder = new StringBuilder();
    strBuilder.Append("this")
    .Append("is")
    .Append("a")
    .Append("better")
    .Append("way");
    string sentence = builder.ToString();
    

    格式化

    C#6.0开始支持字符串插入的语法,可以代替String.Format方法。使用String.Format方法容易出错,要么是写错参数,要么是序号写错。字符串插入使用$符号,在字符串中可以直接插入变量,由Visual studio最终帮我们转换成String.Format代码。

    string appleStr = "apple";
    //编写代码时容易出错——写错参数序号,漏写参数
    string out1 = string.Format("this is an {0}", appleStr);
    //参数直接写入到字符串中,更不容易出错
    string out2 = $"this is an {appleStr}";
    

    nameof 表达式

    C#6.0开始支持nameof表达式,使用这个表达式,方便我们将代码中的类名、属性名、方法名等等用户标识符转换成字符串。nameof表达式类似于typeof,Visual studio会在编译前将表达式转换成字符串。

    //before
    if(x == null) throw new ArgumentNullException("x");
    //now,我们可以很方便的查找引用和重命名
    if(x == null) throw new ArgumentNullException(nameof(x));
    
    //before
    if(PropertyChanged != null){
        PropertyChanged?.Invoke(this, "Count");
    }
    //now
    if(PropertyChanged != null){
        PropertyChanged?.Invoke(this, nameof(Count));
    }
    

    相关文章

      网友评论

          本文标题:字符串的使用经验

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