zoukankan      html  css  js  c++  java
  • C# 6.0 11个新特性

    1. 静态using(static using)

    静态using声明允许不使用类名直接调用静态方法。

    The static using declaration allows invoking static methods without the class
    name.

    In C# 5

    using System;
    
    Console.WriteLine("Hello, World!");
    
    

    In C# 6

    using static System.Console;
    
    WriteLine("Hello, World");
    

    2. 表达式方法(Expression-Bodied Methods)

    使用表达式方法,只有一条语句的方法可以使用lambda语法写。

    With expression-bodied methods, a method that includes just one statement can
    be written with the lambda syntax.

    In C# 5

    public bool IsSquare(Rectangle rect)
    {
        return rect.Height == rect.Width;
    }
    

    In C# 6

    public bool IsSquare(Rectangle rect) => rect.Height == rect.Width;
    

    3. 表达式属性(Expression-Bodied Properties)

    跟表达式方法类似,只有一个get访问器的单行属性可以使用lambda语法写。

    Similar to expression-bodied methods, one-line properties with only a get accessor
    can be written with the lambda syntax

    In C# 5

    public string FullName
    {
        get
        {
            return FirstName +"" + LastName;
        }
    }
    

    In C# 6

    public string FullName => FirstName +"" + LastName;
    

    4. 自动属性初始化器(Auto-Implemented Property Intializers)

    自动属性可以使用属性初始化器初始化。

    Auto-implemented properties can be initialized with a property initializer.

    In C# 5

    public class Person
    {
        public Person()
        {
            Age = 24;
        }
        public int Age {get; set;}
    }
    

    In C# 6

    public class Person
    {
        public int Age {get; set;} = 42;
    }
    

    5. 只读自动属性(Read-Only Auto Properties)

    C# 5需要完整的属性语法实现只读属性,C# 6可以使用自动属性实现。

    To implement read-only properties, C# 5 requires the full property syntax. With
    C# 6, you can do this using auto-implemented properties.

    In C# 5

    private readonly int _bookId;
    public BookId
    {
        get
        {
            return _bookId;
        }
    }
    

    In C# 6

    public BookId {get;}
    

    6. nameof操作符(nameof Operator)

    字段、属性、方法和类型的name可以通过nameof访问。使用nameof,可以方便的重构name变化。

    With the new nameof operator, names of fields, properties, methods, or types can
    be accessed. With this, name changes are not missed with refactoring.

    In C# 5

    public void Method(object o)
    {
        if (o == null) throw new ArgumentNullException("o");
    

    In C# 6

    public void Method(object o)
    {
        if (o == null) throw new ArgumentNullException(nameof(o));
    

    7. Null传递操作符(Null Propagation Operator)

    Null传递操作符简化了空值检查。

    The null propagation operator simplifies null checks.

    In C# 5

    int? age = p == null ? null : p.Age;
    
    var handler = Event;
    if (handler != null)
    {
        handler(source, e);
    }
    

    In C# 6

    int? age = p?.Age;
    
    handler?.Invoke(source, e);
    

    8. 字符串插值(String Interpolation)

    字符串差值移除了对string.Format的调用,使用表达式占位符取代数字格式占位符。

    The string interpolation removes calls to string.Format. Instead of using
    numbered format placeholders in the string, the placeholders can include
    expressions.

    In C# 5

    public override ToString()
    {
        return string.Format("{0}, {1}", Title, Publisher);
    }
    

    In C# 6

    public override ToString() => $"{Title} {Publisher}";
    

    9. 字典初始化器(Dictionary Initializers)

    字典可以使用类似集合的字典初始化器初始化。

    Dictionaries can now be initialized with a dictionary initializer—similar to the
    collection initializer.

    In C# 5

    var dict = new Dictionary<int, string>();
    dict.Add(3,"three");
    dict.Add(7,"seven");
    

    In C# 6

    var dict = new Dictionary<int, string>()
    {
        [3] ="three",
        [7] ="seven"
    };
    

    10. 异常过滤器(Exception Filters)

    异常过滤器允许你在捕获异常前进行过滤。

    Exception filters allow you to filter exceptions before catching them.

    In C# 5

    try
    {
        //etc.
    } catch (MyException ex)
    {
        if (ex.ErrorCode != 405) throw;
        // etc.
    }
    

    In C# 6

    try
    {
        //etc.
    } catch (MyException ex) when (ex.ErrorCode == 405)
    {
        // etc.
    }
    

    11. 在Catch使用Await(Await in Catch)

    await可以在catch块中直接使用,C# 5中需要变通使用。

    await can now be used in the catch clause. C# 5 required a workaround.

    In C# 5

    bool hasError = false;
    string errorMessage = null;
    try
    {
        //etc.
    } catch (MyException ex)
    {
        hasError = true;
        errorMessage = ex.Message;
    } 
    if (hasError)
    {
        await new MessageDialog().ShowAsync(errorMessage);
    }
    

    In C# 6

    try
    {
        //etc.
    } catch (MyException ex)
    {
        await new MessageDialog().ShowAsync(ex.Message);
    }
    
  • 相关阅读:
    POJ
    FZU
    HDU
    HDU
    HDU
    HDU
    Educational Codeforces Round 84 E. Count The Blocks
    B Boundary(由弦求圆)
    D. Maximum Sum on Even Positions(翻转1次,求最大偶数位和)
    E. DeadLee(思维,拓扑图处理)
  • 原文地址:https://www.cnblogs.com/zhangdk/p/5914182.html
Copyright © 2011-2022 走看看