前言

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

正文

内插符

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

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这种既不影响性能同时还能给我们提供静态检查的,我个人认为是值得使用的。

c# 优化代码的一些规则——字符串使用优化[四]的更多相关文章

  1. c# 优化代码的一些规则——const 和 readonly[二]

    前言 在c# 的世界中,在初学的时候,可能很难区分readonly 和 const,两者都是不可修改. 看到这两个单词,我们想的是,最多他们的区别也不会太大.然后事实却出乎我们的意料. 正文 这两个声 ...

  2. c# 优化代码的一些规则——优先隐式类型[一]

    前言 说到底就是优先使用var,这个关键字,在c# 3.0中出现了. 首先要确认几点,一个就是var 是静态变量,而不是动态变量,也就是说使用var 你是不必去担心性能问题得, 百度百科: 1)静态存 ...

  3. c# 优化代码的一些规则——使用is或as和强制类型转换的区别[三]

    前言 使用as和强制类型转换的时候的区别是否仅仅是代码形式上的区别. 答案是肯定不是的. 正文 看两段代码: object o = Factory.GetObject(); Student stude ...

  4. PL/SQL 美化器&规则解释&优化代码

    前言 PLSQL有非常强大的自定义设置功能,比如美化文件规则, 使用者可以自行定义编辑规则,以便更好的优化SQL语句,增加可读性. 例如以下的部分代码,又长,分段不好,空格太多,结构散乱,还没有注释. ...

  5. 前端页面卡顿?或是DOM操作惹的祸,需优化代码

    文档对象模型(DOM)是一个独立 于特定语言的应用程序接口.在浏览器中,DOM接口是以JavaScript语言实现的,通过JavaScript来操作浏览器页面中的元素,这使得 DOM成为了JavaSc ...

  6. Web前端开发最佳实践(13):前端页面卡顿?可能是DOM操作惹的祸,你需要优化代码

    文档对象模型(DOM)是一个独立于特定语言的应用程序接口.在浏览器中,DOM接口是以JavaScript语言实现的,通过JavaScript来操作浏览器页面中的元素,这使得DOM成为了JavaScri ...

  7. [好文翻译]WEB前端性能优化的14条规则

    作为一个半前端工程师,而且只会写点HTML5和CSS3的“假”前端工程师,为了能更好地理解一下前端的花花世界,最近拜读了<高性能网站建设指南>一书,对作者提出的前端性能优化的14个规则获益 ...

  8. Yahoo网站性能优化的34条规则

    摘自:http://blog.chinaunix.net/uid/20714478/cid-74195-list-1.html Yahoo网站性能优化的34条规则 1.尽量减少HTTP请求次数 终端用 ...

  9. Yahoo关于性能优化的N条规则

    本来这是个老生常谈的问题,上周自成又分享了一些性能优化的建议,我这里再做一个全面的Tips整理,谨作为查阅型的文档,不妥之处,还请指正: 一. Yahoo的规则条例: 谨记:80%-90%的终端响应时 ...

随机推荐

  1. python画新冠肺炎国内和世界各国累计确诊数量热图

    新冠肺炎国内疫情基本控制住,很多地方都开始摘下口罩了.但是国外的疫情依然处于爆发期,特别是美国,截止目前其累计确诊数量已突破110w.五一节北京柳絮杨絮满天飞,不适合外出.在家心血来潮,献丑画一下各地 ...

  2. Character Array and Character Pointer

    最近复习数据结构实验时,碰到这么一行代码,看的有点不爽. typedef char** HuffmanCode; 借此梳理下数组和指针. int* p; //指针变量p中存的地址代表的内存单元中的数据 ...

  3. Python第三方库之Numpy库

    概述 Numpy  最基本的库,是用于处理含有同种元素的多维数组运算的第三方库 —科学计算包,python数据分析及科学计算的基础库,几乎支撑所有其他库 —支持N维数组运算.处理大型矩阵.成熟的广播函 ...

  4. 支付宝小程序云开发(Serverless)

    支付宝小程序云开发(Serverless) 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 一.在支付宝账号里面开通小程序云服务 ...

  5. maven的pom.xml配置文件相关依赖jar包

    <!--声明变量--> <properties> <project.build.sourceEncoding>UTF-8</project.build.sou ...

  6. Go语言接口内部布局和方法集详解

    1. 接口值内部布局   如果用户定义的类型实现了某个接口类型声明的一组方法,那么这个用户定义的类型的值就可以赋给这个接口类型的值.这个赋值会把用户定义的类型的值存入接口类型的值.赋值完成后得到的值称 ...

  7. Python:日薪工资计算

    劳动者离职,当天要结清工资,实际操作是当天算清,三日内结清.有的公司省人力和吃利息,统一计算,统一下月月底发放. 有时要验算下离职工资,用Python操作一番,输入计时天数.请假小时.加班小时.基本工 ...

  8. Python哈希表和解析式

    目录 1. 封装和解构 1.1 封装 1.2 解构 2. 集合Set 2.1 初始化 2.2 增加 2.3 删除 2.4 遍历 2.5 并集&交集&差集&对称差集 3.字典 3 ...

  9. c++内存管理学习纲要

    本系列文章,主要是学习c++内存管理这一块的学习笔记. 时间:6.7-21 之下以技术内幕的开头语,带入到学习C++内存管理的技术中吧: 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题 ...

  10. tp5.1 nginx环境下url去掉index.php

    原来的地址http://xxxxxxx/index.php/admin/login/index.html 修改完的路径http://xxxxxxx/admin/login/index.html 修改. ...