最近 Visual Studio 2026 正式推出了,伴隨而來的就是 .Net10 因為有 LTS 版本
看來會是這陣子主要升級專案的目標,對我來說每次更西,我都會看一下多什麼,有啥是可以馬上遇到的..
.NET 10 加入一個很小但影響很大的語法糖
叫做 "field",繼上次我記得是 2007 之後 get;set;
我覺得算一個語法上的改進,不過我想應該也是語法糖而已,等等晚點用 MSIL 來看看
在很久以前,我們在寫 物件的 Property 我們會這樣做
public class FooObject
{
private string _token;
public string Token
{
get
{
return _token;
}
set
{
_token = value;
}
}
}
之後2007 , get;set; 出現後,我們大概會寫成這樣
public class FooObject
{
public string Token
{
get;set;
}
}
但是,有時候我們必須要在 Property 做一些處理,這時候我們又得回到最原始需要一個 private 的時候
不過,至於 value 在 setter 有用已經很方便了,但是新的 ,NET10 之後,在 getter 這邊可以使用到 field 這關鍵字
用法如下
public class FooObject
{
public string Token
{
get
{
return field;
}
set {
field = value;
}
}
}所以配合 field 我們可以在 getter 那邊進行改造
public class FooObject
{
public string Token
{
get
{
if (field == null)
field = Guid.NewGuid().ToString();
return field;
}
set
{
field = string.IsNullOrWhiteSpace(value)
? "empty"
: value.Trim();
}
}
}這應該是目前,看到 .NET10 進化裡面最簡單的一個關鍵字, field 他就猶如你寫了一個 private 的參數
你可以在裡面施展一些你想封裝的東西奇技淫巧。
"field" 的核心價值是讓你不需要 private 欄位
也能在 getter 與 setter 裡建立完整邏輯,而且寫起來更簡潔
這邊附上 .NET9 跟 .NET10 的 MSIL 比較
.NET 9 單純 get;set;

.NET 10 field 後的 MSIL

本文原文首發於我的個人部落格:C#14的新關鍵字 field , .NET 10 之後才能用
---
Yesterday I wrote down the code. I bet I could be your hero. I am a mighty little programmer.
