概述:所有代码均来自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. =============Python安装与使用================

    用文本编辑器写Python程序,然后保存为后缀为.py的文件,就可以用Python直接运行这个程序了. Python的交互模式和直接运行.py文件有什么区别呢? 直接输入python进入交互模式,相当 ...

  2. NSDictionary转化为实体类对象

    方法一: 使用objective-c NSObject自带的方法 setValuesForKeysWithDictionary:dict 作用是: 如果NSDictionary中的key和实体类对象的 ...

  3. Stanford机器学习---第一讲. Linear Regression with one variable

    原文:http://blog.csdn.net/abcjennifer/article/details/7691571 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归 ...

  4. Coursera台大机器学习课程笔记3 – 机器学习的分类和机器学习的可能性

    第三讲比较简单,参考:http://www.cnblogs.com/HappyAngel/p/3466527.html 第四讲很抽象,尤其是第四个视频,目的仍然是为了证明机器学习是可能的,不过这个博主 ...

  5. HDU3344(小广搜+小暴力

    Kakuro Extension Extension Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja ...

  6. 不用任何图片,只用简单的css写出唯美的钟表,就问你行吗?

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAGHCAIAAABJR31QAAAgAElEQVR4nOy9aXhc1ZUurPvcH7f73n ...

  7. mysql中limit与in不能同时使用的解决方式.

    mysql中limit与in不能同时使用的解决方式. 分类: MySQL2011-10-31 13:53 1277人阅读 评论(0) 收藏 举报 mysqlsubquery MySQL5.1中子查询是 ...

  8. FlashDevelop快捷键

    将鼠标点到变量上面后,同时按ctrl+shift+1(左键盘),可以自动添加变量或者函数.复制一行代码.CTRL+D:ctrl+shift+k 颜色代码拾取器 ctrl+shift+b 注释年选代码段 ...

  9. 如何在android的mk文件添加依赖已经编译好的库

    用$(MY_LIB)是代表你的库的所在目录,目录结构是这样 MY_LIB |---include |-----xxx.h |-----xxx.h |---lib |----MYLIB.a LOCAL_ ...

  10. codeforces B. Xenia and Ringroad 解题报告

    题目链接:http://codeforces.com/problemset/problem/339/B 题目理解不难,这句是解题的关键 In order to complete the i-th ta ...