C#语法糖
2012-07-26 11:14 JustRun 阅读(526) 评论(1) 编辑 收藏 举报1. 自动属性
private string _myName; public string MyName { get { return _myName; } set { _myName = value; } }
public string MyName { get; set; }
2. 匿名委托和Lambda表达式
class MyClass { public delegate void DoSomething(int a); //定义方法委托 private void DoIt(int a) { Console.WriteLine(a); } private void HowtoDo(DoSomething doMethod,int a) { doMethod(a); } public static void Main(string[] args) { MyClass mc = new MyClass(); //调用定义的方法委托 mc.HowtoDo(new DoSomething(mc.DoIt), 10); int x = 10; //使用匿名委托 mc.HowtoDo(delegate(int a){ Console.WriteLine(a + x); },10); //使用lamda表达式 mc.HowtoDo(a=>Console.WriteLine(a+x),10); Console.ReadLine(); } }
3. 集合类声明
之前我们声明一个List并给list赋初始值,必须得这么写:
List<string> list = new List<string>(); list.Add("a一"); list.Add("b二"); list.Add("c三");
现在不需要了,直接写就可以了
List<string> list = new List<string> { "def","OK" };
4. 问号的演变
老掉牙的一个问号+冒号
var b = 3; var a = b > 9?b.ToString():”0”+b;
新宝宝两个问号 ??,它表示左边的变量如果为null则值为右边的变量,否则就是左边的变量值
string a = null; var b = a??””;
5. 类型实例化的语法糖
public class Abc { public int ID { get; set; } public string Name { get; set; } public string Url { get; set; } }
我们没有为上面的类声明构造函数,但是我们可以像下面的形式来实例化它
public static void Main(string[] args) { var abc = new Abc{ ID=1, Name="xuehai", Url="http://www.xuehai.net/" }; }
6. 扩展方法
在c#3.5时引入了扩展方法,我们可以在不修改类源码的情况下给类增加实例方法,这个很有意义。它的实质也是一种语法糖的实现
例如我们给String类扩展一个IsNumber的方法:
public static class StringExt { static private Regex regexNumber = new Regex("\\d+"); static public bool IsNumber(this string input) { if (string.IsNullOrEmpty(input)) { return false; } return regexNumber.IsMatch(input); } }
我们可以在String实例上调用这个方法了
var abc = “123”; var isNumber = abs.IsNumber();
7. 匿名类
var a = new { ID = 1,Name=”xuehai”,BlogUrl=”http//www.xuehai.net/” };
匿名类在linq to sql或者entity framework中返回查询数据时很好用。
本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名justrun(包含链接)。如您有任何疑问或者授权方面的协商,请给我留言。