C#、.Net代码精简优化(空操作符(??)、as、string.IsNullOrEmpty() 、 string.IsNullOrWhiteSpace()、string.Equals()、System.IO.Path 的用法)
一、空操作符(??)
在程序中经常会遇到对字符串或是对象判断null的操作,如果为null则给空值或是一个指定的值。通常我们会这样来处理:
、string name = value;
if (name == null)
{
name = string.Empty;
}
2、使用三元操作符(? :)对上面对吗进行优化:
string name = value == null ? string.Empty : value;
上面的两种方式 的代码不够简洁,?? 操作符来进行进一步优化,?? 操作符意思是如果为null取操作符左边的值,否则取右边的值。
string name = value ?? string.Empty;
二、使用As转换类型
在C#中进行类型转换有很多种方式比如可以进行强制类型转换,通常在转换前会使用Is进行类型的判断,所以您可能经常写过或见过类似下面的代码
if (obj is Employee)
{
var result = (Employee)obj;
}
上面的代码不会报异常,但在整个过程中做了两次转换操作,这样会降低性能。我们可以使用as操作符来进行类型的转换,同样也不会报异常,如果类型不兼容则返回null,而是用as进行转换整个过程只转换一次。代码如下:
var result = obj as Employee;
if (result != null)
{ }
三、在自动属性中,我们可以给get或set访问器设置访问级别,使属性变成只读属性或是只写属性
public class PropertyTest
{
public string ThisIsReadOnlyProperty { get; private set; }
public double ThisIsWriteOnlyProperty { private get; set; }
}
四、string.IsNullOrEmpty() 、 string.IsNullOrWhiteSpace()
这两个方法看名称也可以知道IsNullOrEmpty是判断空引用和空字符串,而IsNullOrWhiteSpace是判断空引用和字符串中的每一个字符是否是空格。
需求:需要将三个名字连接在一起,并且希望中间名字不为空字符串和不出现多余的空格,我们会写出下面的代码:
public string FullName(string Name_1, string Name_2, string Name_3)
{
if (string Name_2 == null || mstring Name_2.Trim().Length == )
{
return string.Format("{0} {1}", Name_1, Name_3);
}
return string.Format("{0} {1} {2}", Name_1, Name_2, Name_3);
}
上面的代码中使用了Trim来去掉空格然后判断其长度是否为0,代码也非常的清晰简洁,但是会产生额外的String对象以至于影响性能,这时就应该使用Net4.0中IsNullOrWhiteSpace方法(下面的代码非常简洁,而且也不用担心会产生额外的String对象没有及时的进行垃圾回收而影响性能。)
public string FullName(string Name_1, string Name_2, string Name_3)
{
if (string.IsNullOrWhiteSpace(Name_2))
{
return string.Format("{0} {1}", Name_1, Name_3);
}
return string.Format("{0} {1} {2}", Name_1, Name_2, Name_3);
}
五、string.Equals()
string.Equals方法有很多的重载供我们使用,但是其中有些常常会被我们忽视掉
public bool EqualsTest(string type)
{
if (type.Equals(""))
{
}
}
如果type为null会抛出NullReferenceException异常,所以为了不抛出异常,在判断之前先要进行null的判断,改写成下面这样
public bool EqualsTest(string type)
{
if (type !=null && type.Equals(""))
{
}
}
上面的解决办法 相当于每次都要做两次判断,很麻烦而且有时还有可能遗忘,如果使用string.Equals就可以解决这个问题
public bool EqualsTest(string type)
{
if (string.Equals(type, "")) //type为null时不会抛出异常而是直接返回false。
{
}
}
判断字符串相等的时候有时会需要区分大小写,很多人的习惯做法是先转换成大小或是小些在进行比较(建议转换成大写,因为编译器做了优化可以提高性能),但是当转换成大写或是小写时又会创建的的字符串,使性能降低。这时应该使用StringComparison.InvariantCultureIgnoreCase,代码如下
public bool EqualsTest(string type)
{
if ((string.Equals(type, "",StrequityngComparison.InvariantCultureIgnoreCase)))
{
}
}
六:System.IO.Path(当我们遇到这种需要对文件路径进行操作时,我们可以去使用Path类的静态方法)
Net中的System.IO.Path方法有很多的静态方法来处理文件和路径。很多时候我们尝试手动的将路径和文件名结合在一起而导致产生的文件路径不可用,因为我们往往忽视了路径后面可能有一个结尾符号‘\’。现在使用Path.Combine()方法可以避免这种错误
string fullPath = Path.Combine(workingDirectory, fileName);
假设现在有一个带文件名的完整的路径名,我们需要取其中的路径、文件名或是文件的扩展名。Path类的很多静态方法可以满足我们的需要,如下
string fullPath = "D:\\Downloads\\output\\PathTest.html";
string pathPart = Path.GetPathRoot(fullPath);// 结果:D:\
string filePart = Path.GetFileName(fullPath);// 结果:PathTest.html
string extPart = Path.GetExtension(fullPath);// 结果: .html
string dirPart = Path.GetDirectoryName(fullPath);// 结果:"D:\downloads\output"
C#、.Net代码精简优化(空操作符(??)、as、string.IsNullOrEmpty() 、 string.IsNullOrWhiteSpace()、string.Equals()、System.IO.Path 的用法)的更多相关文章
- C#/Net代码精简优化技巧
(一) 在我们写代码的时候可以使用一些小的技巧来使代码变得更加简洁,易于维护和高效.下面介绍几种在C#/Net中非常有用的一些编程技巧. 1 空操作符(??) 在程序中经常会遇到对字符串或是对象判断n ...
- Java开发代码性能优化总结
代码优化,可能说起来一些人觉得没用.可是我觉得应该平时开发过程中,就尽量要求自己,养成良好习惯,一个个小的优化点,积攒起来绝对是有大幅度效率提升的.好了,将平时看到用到总结的分享给大家. 代码优化的目 ...
- 35个java代码性能优化。。转
前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑 的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用 ...
- 35 个 Java 代码性能优化总结
前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用, ...
- Java 代码性能优化总结
前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用, ...
- Java代码性能优化总结
代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是, ...
- java代码性能优化总结(转载)
原文链接:http://developer.51cto.com/art/201511/496263.htm 前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改 ...
- [转]Java代码(性能)优化总结
前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用, ...
- Java 代码性能优化
代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是, ...
随机推荐
- oracle 小题
create table student(sno varchar2(10) primary key,sname varchar2(20),sage number(2),ssex varchar2(5) ...
- 【安装mysql数据库】
方法/步骤 请注意上图中选择Custom选项,这样才能修改安装目录. 请注意为了数据安全,不要把mysql安装在系统盘,如C:盘. 可以在其他盘符下,新建两个文件夹,一个存储mysql的文件, ...
- iOS 的文字滚动条效果的实现
UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(50, 100, 300, 50)]; label.text = @"欢 ...
- Drupal 7 安装时的数据库问题
在安装D7时,需要用PhpMyAdmin创建数据库,不建议使用ROOT帐号而需要建立一个新的帐号.一般,建立一个新的账号,如foo,并同时建一个同名的数据库,选择localhost(如果是本地).但是 ...
- C#中Directory.GetFiles() 函数的使用
C#中Directory.GetFiles(string path , string searchPattern, SearchOption searchOption ) 获取path目录中所有文件 ...
- reduce() 函数
reduce()函数 reduce()函数也是Python内置的一个高阶函数.reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传 ...
- python 库安装
用到再更新. #Windows 一 exe 安装包 http://www.lfd.uci.edu/~gohlke/pythonlibs/#scikit-learn 二 setup.py cmd 进入目 ...
- java 并发性和多线程 -- 读感 (二 线程间通讯,共享内存的机制)
参考文章:http://ifeve.com/java-concurrency-thread-directory/ 其中的竞态,线程安全,内存模型,线程间的通信,java ThreadLocal类小节部 ...
- Python小爬虫练习
# coding: utf-8 __author__ = 'zhangcx' from urllib3 import PoolManager import codecs import json cla ...
- 用JQ仿造礼德财富网的图片查看器
现在就职于一家P2P平台,自然也会关注同行其它网站的前端技术,今天要仿造的是礼德内页的一个图片查看器效果.不过说白了,无论人人贷也好礼德财富也好,很多地方的前端都做的不尽如人意,比如忽略细节.缺乏交互 ...