闽公网安备 35020302035485号
                public string Name { get; set; }
这等同于private string _name;
public string Name
{
    get => _name;
    set => _name = value;
}
使用 field 关键词改一下如下:public string Name
{
    get => field;
    set => field = value;
}
再来看一个实际一点使用示例:internal static class FieldKeywordSample
{
    public static string Name
    {
        get;
        set => field = value?.Trim() ?? string.Empty;
    } = string.Empty;
}
这个示例我们每次对 setter 做了一个 Trim() 的操作,并且保证不给 field 设置 null, null 时设置为 string.Empty 。这在之前版本我们就得先声明成下面这样:internal static class FieldKeywordSample
{
    private static string _name;
    public static string Name
    {
        get => _name;
        set => _name = value?.Trim() ?? string.Empty;
    } = string.Empty;
}
需要声明这个字段并且 getter 也需要写完整,即使没有特殊逻辑直接返回了字段。使用 field 关键词之后就无需声明字段了,并且如果是直接返回或者设置 value 就可以使用自动属性的写法,如下:public int Num { get => field > 0 ? field : 0; set; }
public int Num2 { get; set => field = value > 0 ? value : 0; }
所以之前这个功能也被称为半自动属性,public string Name { get; set; } 则是完全自动属性。除了这样 getter/setter 直接使用,我们也可以在 getter 返回之前、setter set 之前以及之后做一些自定义的操作,如下:internal static class FieldKeywordSample
{
    public static string Name
    {
        get;
        set => field = value?.Trim() ?? string.Empty;
        //set;
    } = string.Empty;
    public static string Description
    {
        get => field ?? string.Empty;
        set
        {
            Console.Write(">>>");
            Console.WriteLine(field);
            Console.WriteLine($"Before set description, {nameof(value)}: {value}");
            field = value?.Trim()!;
            // CS0103: The name 'field' does not exist in the current context
            // Console.WriteLine($"After set description, {field}");
            Console.WriteLine("After set description");
            Console.Write(">>>");
            Console.WriteLine(field);
        }
    } = default!;
    public static void Run()
    {
        Name = " Hello ";
        Console.WriteLine(Name);
        Console.WriteLine(Name.Length);
        // 堆代码 duidaima.com
        Console.WriteLine(Description is not null);
        Description = " World ";
        Console.WriteLine(Description);
        Console.WriteLine(Description.Length);
    }
}
输出结果如下:
	
	
dotnet tool update -g dotnet-execute --prerelease