• c# 优化代码的一些规则——字符串使用优化[四]


    前言

    在我们的程序中,经常使用到字符串,字符串的写法非常多,但是有一个问题就是我们写的字符串是否合适呢?

    正文

    内插符

    介绍一个东西叫做内插字符,如下:

    static void Main(string[] args)
    {
    	string w = "Word";
    	string s = $"Hello {w}";
    }
    

    也就是说在字符串前面加上$,然后我们就可以在字符串中加入{}来实现表达式插入其他字符。

    这让我们想起了string.format。

    string ss = string.Format("Hello {0}",w);
    

    只不过我们写在后面。

    内插字符是我们方便了很多,我们可以在我们想加入的位置直接插入字符。

    有一个问题,请看:

    string pi1= $"pi is {Math.PI}";
    string pi2 = $"pi is {Math.PI.ToString()}";
    

    这上下两条语句是否相同?

    第一条一句通过装箱拆箱操作。

    而第二条,请看:

    public override string ToString() => 
        Number.FormatDouble(this, null, NumberFormatInfo.CurrentInfo);
    

    而是通过优化来实现。

    所以呢,下面那条性能更好。

    前面提及内插符可以简化我们的操作,那么是否能接受一些复杂的操作,如内插符语句内内插内插符。

    同样是可以的:string s =$"{$""}",只要符合表达式要求即可。

    nameof

    private string name;
    
    private Dictionary<string, string> data;
    
    public string StudentName
    {
    	get { return data.GetValueOrDefault(nameof(name)); }
    	set { SetData(nameof(name),value); }
    }
    
    private void SetData(string key,string value) {
    	data[key] = value;
    }
    

    如下面需要卸载Dictionary,如果直接写入name字符串的话,那么会出现一个问题,就是万一哪天我们属性名改了之后呢,可能我们会忘记去改。

    这样子是否我们的nameof会影响我们的性能呢?答案是否定的,因为其运作在编译期。

    public string StudentName
    {
        get => 
            CollectionExtensions.GetValueOrDefault<string, string>((IReadOnlyDictionary<string, string>) this.data, "name");
        set
        {
            this.SetData("name", value);
        }
    }
    

    nameof 在try catch 中使用的比较多。

    public int calc(int x,int y)
    {
    	try
    	{
    		return x / y;
    	} catch(Exception e)
    	{
    		throw new Exception($"{nameof(y)+":"+y.ToString()}");
    	}
    }
    

    总结一个nameof:

    nameof的好处是,如果符号名字改了之后,使用nameof来获取符号名称的地方或获得修改后的名字,使我们的静态检查功能得到了充分的发挥。

    注意:

    public class A1<T> 
    {
    	public  static string getname() {
    		return nameof(A1<T>);
    	}
    }
    

    这里getname返回的是A1,而不会动态打印泛型是啥,因为其在编译期。

    总之nameof这种既不影响性能同时还能给我们提供静态检查的,我个人认为是值得使用的。

  • 相关阅读:
    elasticsearch(0.90.10)安装配置+超多插件!!
    【架构】基于Nutch+Hadoop+Hbase+ElasticSearch的网络爬虫及搜索引擎
    Elasticsearch(1.1.1)基础教程pdf
    hadoop1.2.1+hbase0.94.11+nutch2.2.1+elasticsearch0.90.5安装配置攻略
    安装和使用 Elasticsearch(1.1.1)+marvel插件、Kibana插件
    nutch2.1+mysql+elasticsearch整合linux单机部署
    Nutch 快速入门(Nutch 2.2.1+Hbase+Solr)
    Linux中VMware虚拟机增加磁盘空间的扩容操作
    java8使用stream的collect进行list转map注意事项
    Java 8 指南
  • 原文地址:https://www.cnblogs.com/aoximin/p/12975016.html
Copyright © 2020-2023  润新知