C# 6.0使用roslyn編譯器,而roslyn是被內建在VS2015,雖然VS2013可透過Nuget安裝”Microsoft.Net.Compilers”來使用C#6.0,但是不知道會不會有未知問題,所以還是建議使用VS2015來寫比較好。
1.Auto property enhancements (自動屬性初始化)
class Student
{
public string Name { get; set; } = "Neil";
public string Id { get; set; } = "A001";
public DateTime DateCreated { get; private set; } = DateTime.Now;
}
2.Expression-bodied funtion(成員使用lambda運算式)
class Student
{
public string Name { get; set; } = "Neil";
public string Id { get; set; } = "A001";
public DateTime DateCreated { get; private set; } = DateTime.Now;
//C# 6.0新增寫法
public string GetStudentInfoNew => string.Format("Name:{0},Id:{1}", Name, Id);
//一般寫法
public string GetStudentInfoOld()
{
return string.Format("Name:{0},Id:{1}", Name, Id);
}
}
3.Using Static(使用Using 靜態命合類別)
using static System.String;//使用using static將string載入
namespace Csharp567
{
public class Sample
{
public bool CheckIsNullNew(string val)
{
//不用string就可以直接使用IsNullOrEmpty方法
return IsNullOrEmpty(val);
}
public bool CheckIsNullOld(string val)
{
return string.IsNullOrEmpty(val);
}
}
}
4.Null conditional operators(Null條件運算子)
public void GetStudentName()
{
List<Student> students = null;
students = new List<Student>() { new Student() { Name = "Neil", Id = "001" } };
//新寫法
if (students?[0]?.Name != null)
{
Console.WriteLine(string.Format("Name:{0}", students[0].Name));
}
//舊寫法
if (students != null && students[0] != null && students[0].Name != null)
{
Console.WriteLine(string.Format("Name:{0}", students[0].Name));
}
}
5.String interpolation(字串插補)
public void ShowString()
{
string name = "Neil";
int id = 1;
//舊寫法
string oldStr= string.Format("Name:{0},Id:{1}", Name, Id);
//新寫法
string newStr = $"Name:{Name},Id:{Id}";
}
6.nameof expressions(nameof運算子)
public void ShowStudentId()
{
int studentId = 123;
//用vs工具改名稱會一起更改
string str = $"MethodName:{nameof(ShowStudentId)} ,{nameof(studentId)}:{studentId} Show Success!!";
//result => ShowStudentId , studentId:123 Show Success!!
}
7.Index initializers(索引初始設定)
var studentsOld = new Dictionary<int, string>
{
{1,"Neil" },
{2,"Jeremy" }
};
var studentNew = new Dictionary<int, string>
{
[1] = "Neil",
[2] = "Jeremy"
};
8.Exception filters(例外過濾)
try
{
var r = 0;
r = 0 / 0;
}
catch (Exception ex) when (ex.Message.Contains("KeyeError")) //可filter自訂義條件
{
Console.WriteLine($"msg: {ex.Message}");
}
Read more...