为什么在C#中定义属性的两种方法会有不同的结果?

srn*_*dai 2 c#

在C#中定义属性的两种方法

public class Program {

    public static bool[] Property1 => new bool[1];
    public static bool[] Property2 { get; } = new bool[1];

    public static void Main() {

        Property1[0] = true;
        Property2[0] = true;

        Console.WriteLine($"{Property1[0]} {Property2[0]}");

        Console.ReadLine();

    }

}
Run Code Online (Sandbox Code Playgroud)

这两种方式有不同的结果

假真

oer*_*ens 9

public static bool[] Property1 => new bool[1];
Run Code Online (Sandbox Code Playgroud)

在这里,您定义了一个每次读取该属性时都会执行的getter,因此每次都返回一个新的bool []。并且该数组中一个元素的默认值为false

public static bool[] Property2 { get; } = new bool[1];
Run Code Online (Sandbox Code Playgroud)

在这里,您只需初始化一次属性的值,然后每次都返回相同的数组,包括将其设置为的值。