C# 6.0 新功能Top 10

本文介绍了C# 6.0中的10项关键改进,包括单行函数表达式化用、条件运算符简化、自动属性初始化器、主构造函数、OUT参数声明、异常过滤、字符串插入值改进、Roslyn编译器开源等,旨在提升代码效率和可读性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://www.developer.com/net/csharp/top-10-c-6.0-language-features.html


1,单行函数表达式化

用=>简化只有一行的函数。

class Employee
{
   // Method with only the expression
   public static int  CalculateMonthlyPay(int dailyWage)  => dailyWage * 30;
}

2,?--条件 运算符

以前需要显式地写判断非空的条件语句

private void GetMiddleName(Employee employee)
{
   string employeeMiddleName = "N/A";

   if (employee != null && employee.EmployeeProfile != null)
      employeeMiddleName = employee.EmployeeProfile.MiddleName;
}

现在可以用一行代码搞定

private void GetMiddleName(Employee employee)
{
   string employeeMiddleName = employee?.EmployeeProfile?.MiddleName ?? "N/A";
}

3,自动属性初始化器

不用再弄一个private的set和类变量了。如下:

class PeopleManager
{
   public List<string> Roles { get; } = new List<string>() { "Employee", "Managerial"};
}


4,主构造函数

通过在类的定义这一层级声明构造函数的入参,取代一个单独的构造函数。入参的范围是类范围,且只在类的初始化时有效,与自动属性初始化器搭配起来好干活。

// Primary constructor
class Basket(string item, int price)
{
   // Using primary constructor parameter values
   // to do auto property initialization.
   public string Item { get; } = item;
   public int Price { get; } = price;
}

5,在函数调用时声明OUT参数

避免在调用函数之前还得专门定义一个out类型的参数:

public bool ConvertToIntegerAndCheckForGreaterThan10(string value)
{
   if (int.TryParse(value, out int convertedValue) && convertedValue > 10)
   {
      return true;
   }

   return false;
}

6,在Catch语句中用await

这样就可以在一个异步操作中处理异步过程中的异常了。

public async void Process()
{
   try
   {
      Processor processor = new Processor();
      await processor.ProccessAsync();
   }
   catch (Exception exception)
   {
      ExceptionLogger logger = new ExceptionLogger();
      // Catch operation also can be aync now!!
      await logger.HandleExceptionAsync(exception);
   }
}


7,异常过滤

可以选择不处理某些异常类型了。

public async void Process()
{
   try
   {
      DataProcessor processor = ne
   }
   // Catches and handles only non sql exceptions
   catch (Exception exception) if(exception.GetType() != typeof(SqlException))
   {
      ExceptionLogger logger = new ExceptionLogger();
      logger.HandleException(exception);
   }
}


8,允许使用 using 静态类

以减少重复代码,比如using Console这个静态类:

using System;
// A static class inclusion
using System.Console;

namespace CSharp6Demo
{
   class Program
   {
      static void Main(string[] args)
      {
         WriteLine("Console. is not required as it is included in the usings!");
      }
   }
}

9,字符串插入值

可以认为是String.Format的改进,可以不再用替代符了,而是直接用变量。

static void Main(string[] args)
{
   string name = "Robert";
   string car = "Audi";
   WriteLine("\{name}'s favourite car is {car}!");
}

10,Roslyn,新的编译器

开源,且有一个接口供扩展。可以认为是“像服务一样的编译器”。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值