概述:所有代码均来自MVC源码的阅读。实际上,也是框架开发中常用的技巧。

1.使用Empty模式处理空对象

return Enumerable.Empty<ModelValidationResult>();

2.ConcurrentDictionary的GetOrAdd

ConcurrentDictionary<string, string> dic = new ConcurrentDictionary<string, string>();
//如果存在pzdn的键,则直接返回;否则,添加CreateObject(),并返回
var reuslt = dic.GetOrAdd("pzdn", CreateObject());

3.使用Case从Object[]转为IEnumberable<>

对于类型转换,往往进行遍历,而忘记了使用扩展方法。

type.GetCustomAttributes(typeof(AttributeUsageAttribute), true)
.Cast<AttributeUsageAttribute>()
.First()

4.使用??简化if

??可以简化注释代码

public string Roles
{
//get
//{
// if (_roles == null) return string.Empty;
// return _roles;
//}
get { return _roles ?? String.Empty; }
set
{
_roles = value;
_rolesSplit = SplitString(value);
}
}
 

5.使用构造函数重载来完成多构造器

其核心为:所有的重载,最终都指向一个具体实现。如下加粗代码:

public HttpStatusCodeResult(int statusCode)
: this(statusCode, null)
{
} public HttpStatusCodeResult(HttpStatusCode statusCode)
: this(statusCode, null)
{
} public HttpStatusCodeResult(HttpStatusCode statusCode, string statusDescription)
: this((int)statusCode, statusDescription)
{
} public HttpStatusCodeResult(int statusCode, string statusDescription)
{
StatusCode = statusCode;
StatusDescription =
statusDescription;
}

6.使用throw Exception来切除分支

对于指定的方法,是在特定的上下文中,做特定的事情。

而上下文,可能就是通过参数进行传递的,或者访问Member。

当上下文为空,或者不满足条件时,方法的执行就没有意义。所以,在函数的适当位置,进行如下类似的判断:

if (httpContext == null)
{
throw new ArgumentNullException("httpContext");
}

7.使用TypeDescriptor进行读取特性列表

IEnumerable<AuthorizeAttribute> attributes = TypeDescriptor.GetAttributes(someClass).OfType<AuthorizeAttribute>();

8.使用Linq的let定义中间变量

如果想要知道let关键字的作用,很简单,考虑实现以下同样的功能,如果将 let trimmed = piece.Trim() 去掉,则代码将怎么写?

internal static string[] SplitString(string original)
{
if (String.IsNullOrEmpty(original))
{
return new string[];
} var split = from piece in original.Split(',')
let trimmed = piece.Trim()
where !String.IsNullOrEmpty(trimmed)
select trimmed;
return split.ToArray();
}

C# 新技巧(一)的更多相关文章

  1. Trickbot展示新技巧:密码抓取器模块

    Trickbot是一个简单的银行木马 来源 https://blog.trendmicro.com/trendlabs-security-intelligence/trickbot-adds-remo ...

  2. 关于HTML5你必须知道的28个新特性,新技巧以及新技术

    1. 新的Doctype 尽管使用<!DOCTYPE html>,即使浏览器不懂这句话也会按照标准模式去渲染 2. Figure元素 用<figure>和<figcapt ...

  3. 不能错过的Sketch实用新技巧和资源集锦

    Sketch是一款基于Mac的矢量绘图应用.面对着功能复杂繁琐的photoshop,Sketch相比较而言身轻如燕.最近也掀起了用Sketch设计产品原型的热潮,因为用它来画设计稿简直轻而易举,相比于 ...

  4. 打开cmd窗口新技巧get

    1.在当前目录下,按住shift键+点击右键,选择在此处打开命令窗口 很多时候我们需要打开命令行然后进入到相应目录进行一些操作. 常规的做法是: Win+R打开运行窗口 输入"cmd&quo ...

  5. 解锁Renderbus客户端使用新技巧----快速渲染效果图篇

    度娘说,效果图最基本的要求就是:应该符合事物的本身尺寸,不能为了美观而使用效果把相关模型的尺寸变动,那样的效果图不但不能起到表现设计的作用,反而成为影响设计的一个因素.可见高效渲染效果图是都是当下我们 ...

  6. linux 系统管理 使用技巧

    一.这篇文章讲了什么? 这篇文章很有参考性哈.本来是想等一段时间有更多条技巧后在发布的,不过,突然发现,我是去年的今天在博客园落户了,祝我的博客一周岁快乐,希望以后多分享一些文章啦.所以就把草稿箱的其 ...

  7. 新学习的语言Groovy

    什么是 Groovy? Groovy 是 JVM 的一个替代语言 —替代 是指可以用 Groovy 在 Java 平台上进行 Java 编程,使用方式基本与使用 Java 代码的方式相同.在编写新应用 ...

  8. 30个有关Python的小技巧

    从我开始学习python的时候,我就开始自己总结一个python小技巧的集合.后来当我什么时候在Stack Overflow或者在某个开源软件里看到一段很酷代码的时候,我就很惊讶:原来还能这么做!,当 ...

  9. <转> 30 个有关 Python 的小技巧

    目录[+] 1.1 拆箱 1.2 拆箱变量交换 1.3 扩展拆箱(只兼容python3) 1.4 负数索引 1.5 切割列表 1.6 负数索引切割列表 1.7指定步长切割列表 1.8 负数步长切割列表 ...

随机推荐

  1. getVisibleSize 和 getContentSize 和 getWinSize

    getVisibleSize:获得视口(可视区域)的大小,若是DesignResolutionSize跟屏幕尺寸一样大,则getVisibleSize便是getWinSize.getVisibleOr ...

  2. Android 字体和颜色

        对于能够显示文字的控件(如TextView EditText RadioButton Button CheckBox Chronometer等等),你有时需要控制字体的大小.Android平台 ...

  3. 第9章 使用ssh服务管理远程主机。

    章节简述: 学习使用nmtui命令配置网卡参数.手工将多块网卡做绑定.使用nmcli命令查看网卡信息和使用ss命令查看网络及端口状态. 完整演示sshd服务配置方法并详细讲述每个参数的作用,实战基于密 ...

  4. 【UER #1】[UOJ#12]猜数 [UOJ#13]跳蚤OS [UOJ#14]DZY Loves Graph

    [UOJ#12][UER #1]猜数 试题描述 这一天,小Y.小D.小C正在愉快地玩耍. 小Y是个数学家,他一拍脑袋冒出了一个神奇的完全平方数 n. 小D是个机灵鬼,很快从小Y嘴里套出了 n的值.然后 ...

  5. 7 Types of Regression Techniques you should know!

    翻译来自:http://news.csdn.net/article_preview.html?preview=1&reload=1&arcid=2825492 摘要:本文解释了回归分析 ...

  6. 使用HTML5 Web存储的localStorage和sessionStorage方式

    localStorage(本地存储),可以长期存储数据,没有时间限制,一天,一年,两年甚至更长,数据都可以使用.sessionStorage(会话存储),只有在浏览器被关闭之前使用,创建另一个页面时同 ...

  7. Vmware虚拟机

    1.在虚拟机安装完系统后找到相对应的保存路径如:D:\VMware\VOS\Win7x64OS 2.该目录下面会有很多文件和文件夹,其中配置文件Windows 7 x64.vmx和硬盘文件Window ...

  8. Centos 7 安装LAMP环境

    一.安装Centos 官网下载Centos 7刻录成光盘后安装 二.安装apache yum install httpd #根据提示,输入Y安装即可成功安装 systemctl start httpd ...

  9. php 今天 昨天 明天 时间戳

    2013年9月10日 16:26:25 echo strtotime('now'),'<br>'; echo strtotime('today'),'<br>'; echo s ...

  10. Java for LeetCode 160 Intersection of Two Linked Lists

    Write a program to find the node at which the intersection of two singly linked lists begins. For ex ...