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这种既不影响性能同时还能给我们提供静态检查的,我个人认为是值得使用的。
c# 优化代码的一些规则——字符串使用优化[四]的更多相关文章
- c# 优化代码的一些规则——const 和 readonly[二]
前言 在c# 的世界中,在初学的时候,可能很难区分readonly 和 const,两者都是不可修改. 看到这两个单词,我们想的是,最多他们的区别也不会太大.然后事实却出乎我们的意料. 正文 这两个声 ...
- c# 优化代码的一些规则——优先隐式类型[一]
前言 说到底就是优先使用var,这个关键字,在c# 3.0中出现了. 首先要确认几点,一个就是var 是静态变量,而不是动态变量,也就是说使用var 你是不必去担心性能问题得, 百度百科: 1)静态存 ...
- c# 优化代码的一些规则——使用is或as和强制类型转换的区别[三]
前言 使用as和强制类型转换的时候的区别是否仅仅是代码形式上的区别. 答案是肯定不是的. 正文 看两段代码: object o = Factory.GetObject(); Student stude ...
- PL/SQL 美化器&规则解释&优化代码
前言 PLSQL有非常强大的自定义设置功能,比如美化文件规则, 使用者可以自行定义编辑规则,以便更好的优化SQL语句,增加可读性. 例如以下的部分代码,又长,分段不好,空格太多,结构散乱,还没有注释. ...
- 前端页面卡顿?或是DOM操作惹的祸,需优化代码
文档对象模型(DOM)是一个独立 于特定语言的应用程序接口.在浏览器中,DOM接口是以JavaScript语言实现的,通过JavaScript来操作浏览器页面中的元素,这使得 DOM成为了JavaSc ...
- Web前端开发最佳实践(13):前端页面卡顿?可能是DOM操作惹的祸,你需要优化代码
文档对象模型(DOM)是一个独立于特定语言的应用程序接口.在浏览器中,DOM接口是以JavaScript语言实现的,通过JavaScript来操作浏览器页面中的元素,这使得DOM成为了JavaScri ...
- [好文翻译]WEB前端性能优化的14条规则
作为一个半前端工程师,而且只会写点HTML5和CSS3的“假”前端工程师,为了能更好地理解一下前端的花花世界,最近拜读了<高性能网站建设指南>一书,对作者提出的前端性能优化的14个规则获益 ...
- Yahoo网站性能优化的34条规则
摘自:http://blog.chinaunix.net/uid/20714478/cid-74195-list-1.html Yahoo网站性能优化的34条规则 1.尽量减少HTTP请求次数 终端用 ...
- Yahoo关于性能优化的N条规则
本来这是个老生常谈的问题,上周自成又分享了一些性能优化的建议,我这里再做一个全面的Tips整理,谨作为查阅型的文档,不妥之处,还请指正: 一. Yahoo的规则条例: 谨记:80%-90%的终端响应时 ...
随机推荐
- MySQL分页查询的性能优化
MySQL limit分页查询的性能优化 Mysql的分页查询十分简单,但是当数据量大的时候一般的分页就吃不消了. 传统分页查询:SELECT c1,c2,cn… FROM table LIMIT n ...
- html入门详细笔记
Web的基本概念 什么是Web? 中文翻译"网页",它是一些列技术的总称,(包括网站的前台布局.后台程序.美工.数据库开发等),我们称它为网页. Web标准 结构标准(HTML) ...
- 数学--数论--HDU 12151七夕节 Plus (因子和线性筛)
Problem Description 七夕节那天,月老来到数字王国,他在城门上贴了一张告示,并且和数字王国的人们说:"你们想知道你们的另一半是谁吗?那就按照告示上的方法去找吧!" ...
- 数学--数论-- HDU -- 2854 Central Meridian Number (暴力打表)
A Central Meridian (ACM) Number N is a positive integer satisfies that given two positive integers A ...
- 【K8S】K8S 1.18.2安装dashboard(基于kubernetes-dashboard 2.0.0版本)
[K8S]K8S 1.18.2安装dashboard(基于kubernetes-dashboard 2.0.0版本) 写在前面 K8S集群部署成功了,如何对集群进行可视化管理呢?别着急,接下来,我们一 ...
- 树莓派4B踩坑指南 - (15)搭建在线python IDE
今天想在树莓派上自己搭一个在线的python IDE,于是找到了一篇教程--Fred913大神的从头开始制作OJ-在线IDE的搭建 自己尝试动手做了一下, 还是发现不少细节需要注意, 记录在此 如果不 ...
- Eugene and an array(边界麻烦的模拟)
一道看似小学生的题,搞了我几个小时...... 首先思路就有两种: \(Ⅰ.找和为0的bad子串,再用n*(n+1)/2-bad子串得到答案\) \(Ⅱ.找和不为0的good子串\) 如果你选择找ba ...
- spark是怎么从RDD升级到DataFrame的?
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是spark专题的第五篇,我们来看看DataFrame. 用过Python做过机器学习的同学对Python当中pandas当中的Data ...
- HDU-6030 Happy Necklace 打表+矩阵快速幂
Happy Necklace 前天个人赛规律都找出来了,n的范围是\(10^{18}\),我一想GG,肯定是矩阵快速幂,然后就放弃了. 昨天学了一下矩阵快速幂. 题意 现在小Q要为他的女朋友一个有n个 ...
- docker磁盘空间不足解决办法
docker磁盘空间不足解决办法 导入docker镜像时,错误提示:磁盘空间不足. 1.查看docker镜像存放目录空间大小 du -hs /var/lib/docker/ 2.停止docker服务. ...