• 快速入门系列--深入理解C#


    C#语言在近些年得到了长足的方法,代码风格越来越简洁美观,例如常用的泛型及其约束、可空类型、隐式类型、匿名类型和委托等,通过下面的表格可以对这部分相对简单的特性的使用有一个初步的了解。

    特性

    示例

    泛型及其约束

    class Sample<T> where T : Stream

    可空类型

    Nullable<int>,int?, 注意这个可空类型为一个结构体而不是类

    隐式类型

    var i = 0;

    匿名类型

    var xionger = new {Name="xionger", age=27}

    简化的迭代器

    For(var i=0; i < 3; i++)

    { yield return i;}

    委托

    Action<T>, Func<T, TResult>,在使用委托时需要注意闭包的概念(和javascript中的类似),理解闭包对象的生命周期

    扩展方法

    public static bool IsNull(this String x){}

    动态类型

    Dynamic expando = new ExpandoObject();在做一些模板方法和复用代码时非常有用。

    分部类

    partial class, 使用场景:扩展代码生成工具的类;某些服务类过大,对其进行逻辑拆分,便于维护

    lambda表达式和表达式树

    returnLength = text => text.length;而表达式树是一个类似语法树的树形结构。

    Expression firstArg = Expression.Constant(2);

    Expression secondArg = Expression.Constant(3);

    Expression add = Expression.Add(firstArg, secondArg);

    由于这部分的特性理解和使用相对容易就不详细介绍了,而之后的表达式树、linq和异步模型相对复杂,将进行详细介绍。

    Linq可以通过一个中间模型将两种存在差异的数据模型通过统一的方式调用,非常的方便,接下来通过一个简单表格描述Linq的常见操作,在实际中,个人还是比较推荐扩展方法的方式。

    操作和扩展

    示例

    选择元素

    var query = from user in SampleData.AllUsers select user;

    过滤和排序

    var query = from defect in SampleData.AllDefects

    where defect.Status != Status.Closed

    where defect.AssignedTo = tim

    orderby defect.Severity descending

    select defect.Summary;

    Let字句

    引入局部变量

    var query = from user in SampleData.AllUsers

    let length = user.Name.length

    orderby length

    select new {Name = user.Name, Length = length}

    连接

    介绍一个相对复杂的分组连接。

    var query = from defect in SampleData.AllDefects

    join subscription in SampleData.AllSubscriptions

    on defect.Project equals subscription.Project

    into groupedSubscriptions

    select new {Defect = defect, Subscription = groupedSubscriptions }

    分组

    var query = from defect in SampleData.AllDefects

    group defect by defect.AssignedTo

    此外,Linq对SQL、XML和对象集合都提供了非常简便的API方法,可以查看相关博客http://www.cnblogs.com/luckdv/articles/1728088.html

    这个给予TPL的C#5特性非常的有意思,可以将异步操作的调用转化为同步的形式,非常的便捷,一个非常简单的例子如下所示。

     1 async void DisplayWebsiteLength(object sender, EventArgs e)
     2 
     3 {
     4 
     5 Label.Text = "Fetching...";
     6 
     7 using(HttpClient client = new HttpClient()){
     8 
     9 Task<string> task = client.GetStringAsync("www.bjork.com");
    10 
    11 String text = await task;
    12 
    13 Label.Text = text.Length.ToString();
    14 
    15 }}
    View Code

    tip:

    PadLeft由于在字符串左侧补零。

    参考资料

    1. ()Jon, Skeet. 《深入理解C#(3)[M]. 北京:人民邮电出版社, 2014.
  • 相关阅读:
    64win7+64Oracle+32plsql
    Delphi与Java中的日期互换
    QT变异版本下载(SJLJ长跳转,DWARF不传递错误(32位专用),SEH(64位专用)),以及QT的实验室项目
    顿悟,职业生涯最重要的是行业水平的积累,而不是多学某一门语言(很危险)——遥想铁血强人刘志军对铁路行业的理解以及执行力
    天下古今之庸人,皆以一惰字致败(联想到了自己的高考数学大题)
    这七种情况下,不要创业
    Android 点击桌面快捷方式和Notifycation跳转到Task栈顶Activity
    字符串模式匹配算法——BM、Horspool、Sunday、KMP、KR、AC算法一网打尽
    QSplashScreen开机画面(不断的repaint)
    一个QT 3D转动控件
  • 原文地址:https://www.cnblogs.com/xiong2ge/p/CSharp_Features.html
Copyright © 2020-2023  润新知