C#语法糖

定义

语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。需要声明的是“语法糖”这个词绝非贬义词,它可以给我们带来方便,是一种便捷的写法,编译器会帮我们做转换;而且可以提高开发编码的效率,在性能上也不会带来损失。

  • 1.简化属性
    未简化的写法
        private string _Name;
        public string Name
        {
            get { return _Name; }
            private set { _Name = value; }
        }

        private int _Age;
        public int Age
        {
            get { return _Age; }
            private set { _Age = value; }
        }

简化之后的的写法

    public string Name { get; set; }
    public int Age { get; private set; }
  • 2.委托
    在.net 1.1时我们不得不声明方法后才在委托中使用,在.net 2.0之后我们可以使用匿名委托,他不单可以简化写法,还可以在匿名委托中访问范围内的变量;再后来Lambda表达式来了,写法就更简便了。
  class MyClass
    {
        //定义委托
        public delegate void TestDelegate(string str);
        //义委托方法
        public void Method(string str)
        {
            Console.WriteLine(str);
        }

        public void UseDelegate(TestDelegate d, string str)
        {
            d(str);
        }
    }
//调用委托
            MyClass mc = new MyClass();
            //调用定义的委托方法
            mc.UseDelegate(new MyClass.TestDelegate(mc.Method), "Hello!");
            //使用匿名委托
            mc.UseDelegate(delegate(string str)
            {
                Console.WriteLine(str);
            }, "Hello!");
            //使用Lambda表达式
            mc.UseDelegate(s =>
            {
                Console.WriteLine(s);
            }, "Hello!");
  • 3.集合
    1.初始化List集合的值
    未简化的写法
            List<string> ListString = new List<string>();
            ListString.Add("a");
            ListString.Add("b");
            ListString.Add("c");

简化之后的写法

            List<string> ListString = new List<string>() 
            {
                "a",
                "b",
                "c"
            };

2.取List中的值
未简化的写法

      foreach (string str in ListString)
            {
                Console.WriteLine(str);
            }

简化之后的写法

ListString.ForEach(s => Console.WriteLine(s));
  • 4.使用完毕后自动释放资源(Using || try finally)
    为了节约资源,每次使用完毕后都要释放掉资源,其中可以使用Using和try finally来进行释放资源操作。需要注意的是使用Using释放资源的对象都必须继承IDisposable接口(MSDN)。
    使用try Finally写法
            SqlConnection conn = null;
            try
            {
                conn = new SqlConnection("数据库连接字符串");
                conn.Open();
            }
            finally
            {
                conn.Close();
                conn.Dispose();
            }

使用Using写法

 using (SqlConnection conn=new SqlConnection("数据库连接字符串"))
{
      conn.Open();
}
  • 5.var隐式类型
    从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型 var.隐式类型的本地变量是强类型变量(就好像您已经声明该类型一样),但由编译器确定类型。(MSDN)
foreach (var item in collection) 
{ 
}
  • 6.问号(?)表达式
    (?:)问号加冒号的形式
string sex = "男";
int result = sex == "男" ? 1 : 0;//如果sex等于“男”result等于1,否则result等于0.

(??)两个问号的形式

string sex = null;
string s = sex ?? "未知";//左边的变量如果为null则值为右边的变量,否则就是左边的变量值
  • 7.类型实例化
class User
    {
        public int ID { get; set; }
        public string Name { get; set; }
    }

未简化的写法

User u = new User();
u.ID = 1;
u.Name = "PanPan";

简化之后的写法

User u = new User() 
{
    ID=1,
    Name="PanPan"
};
  • 8.扩展方法
    扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。 对于用 C# 和 Visual Basic 编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异。 (MSDN)
    <b>注意:定义扩展方法的类必须和使用地方的类命名空间相同(如果不同命名空间记得先引入命名空间)</b>
//定义扩展方法
    public static class StringExtensions
    {
        public static bool IsEmpty(this string str)
        {
            return string.IsNullOrEmpty(str);
        }
    }
//调用扩展方法
     string temp="123";
     bool result = temp.IsEmpty();
  • 9.匿名类
    匿名类型提供了一种方便的方法,可用来将一组只读属性封装到单个对象中,而无需首先显式定义一个类型。 类型名由编译器生成,并且不能在源代码级使用。 每个属性的类型由编译器推断。可通过使用 new 运算符和对象初始值创建匿名类型。(MSDN)
var NoName = new { Name="PanPan",Age=20 };
  • 10.参数默认值
    定义方法时设置参数默认值;调用方法时指定参数赋值;
//定义方法
private void haha(bool bol=false, int ab=1)
{
}
//调用方法
haha(bol: true);
  • 11.Dictionary初始化赋值的新语法
Dictionary<string, string> dic = new Dictionary<string, string>() 
{
      {"1","admin"},{"2","PanPan"}
};
  • 12.dynamic动态对象
    .net4.0中引入了一个新类型 dynamic.该类型是一种静态类型,但类型为 dynamic 的对象会跳过静态类型检查.大多数情况下,该对象就像具有类型 object 一样.在编译时,将假定类型化为 dynamic 的元素支持任何操作(MSDN)。
dynamic dy = "string";
Console.WriteLine(dy.GetType());
//输出:System.String
dy = 100;
Console.WriteLine(dy.GetType());
//输出:System.Int32

END

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,056评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,842评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,938评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,296评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,292评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,413评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,824评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,493评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,686评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,502评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,553评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,281评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,820评论 3 305
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,873评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,109评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,699评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,257评论 2 341

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,574评论 18 139
  • 1. [C#语言基础]请简述拆箱和装箱。 答: 装箱操作: 值类型隐式转换为object类型或由此值类型实现的任何...
    胤醚貔貅阅读 4,762评论 1 29
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,550评论 18 399
  • 实际上是C# 6.0对string.Format的改进 将字符串文本标识为内插字符串($) 根据微软的例子来看: ...
    EvanWay阅读 3,788评论 1 3
  • 毕业季,也是一个做选择的重要时间点,有的人会继续求学深造,有的人则会放弃学业投入工作之中。 我要说的是,有时候学历...
    板路多阅读 662评论 0 49