C# 6.0 功能簡介

  • 6339
  • 0
  • 2016-10-20

C# 6.0 功能簡介

今年將會上市的Visual Studio 2015 將會包含C# 6.0,那到底C# 6.0加了哪些新功能或語法呢?請看以下範例

  • using Static

在C# 中都是使用using來將namespace的API引用。

C# 5.0

Console.WriteLine("Sample");

C# 6.0

using Console;
WriteLine("Sample");

可以直接將Static的Method用using "ClassName"就可以直接呼叫

  • Auto property initializer(自動屬性初始化)

C# 5.0

public class SampleClass
{
	public string Name { get; set; }
	public SampleClass
	{
		Name = "Sample";
	}
}

C# 6.0

public class SampleClass
{
	public string Name { get; set; } = "Sample";
}
  • Dictionary Initializer

C# 5.0

var dic = new Dictionary<string, string>()
{
	{"1", "A"},
	{"2", "B"}
};

C# 6.0

var dic = new Dictionary<string, string>()
{
	["1"] ="A",
	["2"] ="B"
};

var dic2 = new Dictionary<string, string>()
{
	[1] ="A",
	[2] ="B"
};
  • nameof Expression

nameof 是在C# 6.0出現的新字眼,可以直接取的Property的Hardcoded name

C# 6.0

class SampleClass()
{
	public string ID { get; set; } = "A001";
	public string Name { get; set; } = "This is A Name";
}

void Main()
{
	var sample = new SampleClass();
	Console.WriteLine("{0} : {1}", nameof(SampleClass.ID), sample.ID);
	Console.WriteLine("{0} : {1}", nameof(SampleClass.Name), sample.Name);
}
  • exception filter

在寫Code的時候很常會使用到Try Catch的方式避免一些非邏輯性錯誤但在catch的語法只能抓到那些類鞋的exception而不能使用其他參數加以判斷

C# 6.0

var str = new String();
try
{
	str = null;
}
catch (Exception ex) if( str !=null )
{
	Console.WriteLine("Error");
}
catch (Exception ex)
{
	Console.WriteLine(ex.Message);
}
  • await can inside catch code block

在C# 5.0時有出現的Async和Await修飾字是使用在非同步執行續的Task上使用但如果使用try-catch的實在catch的程式碼區塊會無法使用await!但在C# 6.0時可以將await寫在catch的區塊了

C# 6.0

public async void GetData()
{
	try
	{
		var data = await httpClient.GetAsync("some uri here");
	}
	catch (Exception ex)
	{
		await httpClient.PostAsync("reuqest uri" , null);
	}
}
  • Null conduction operator

在C# 中可以使用if-else的方式判斷也可以寫成

var data == "Some String" ? "true is here" : " false is here";

在C# 6.0的部分可以寫成

class Sample()
{
	public string P1 { get; set; } = "V1";
	public P2Class inside { get; set; }
}

class P2Class()
{
	public string P2V1 { get; set; } = "P2V1";
}

void Main()
{
	var sample = new Sample();
	Console.WriteLine(sample?.P1 + " " + sample?.inside?.P2V1??"Not set value yet");
}

先判斷sample是否為null 如果不是null救回傳sample的P1值,後面則是先判斷sample是否為null再判斷Inside是否為null若非null就會丟出P2V1的值要不然就是回傳Not set value yet

  • Expression-bodied method

使用 lamda 取代掉大括號。

C# 5.0

public static string ShowTime()
{
	retrun DateTime.Now.ToString();
}

void main()
{
	Console.WriteLine(ShowTime());
}

C# 6.0

public static string ShowTime() => retrun DateTime.Now.ToString();

void main()
{
	Console.WriteLine(ShowTime());
}

 

  • Easy string format

在C#可以使用String.format來結合字串以及變數!在6.0變得更加方便

C# 5.0

var v1 = "value 1";
var v2 = "value 2";
Console.WriteLine(String.Format("{0}, {1}", v1, v2));

C# 6.0

var v1 = "value 1";
var v2 = "value 2";
Console.WriteLine("\{v1}, \{v2}");

在C# 6.0帶來的以上幾種新的語法以及修飾字!若有錯誤請留言告知感謝~

參考資料

http://www.c-sharpcorner.com/UploadFile/8ef97c/full-C-Sharp-6-0-in-single-article-on-visual-studio-2015-preview/