对 C# 属性使用初始值设定项语法

本文关键字:语法 属性 | 更新日期: 2023-09-27 18:35:34

在C#中,这是有效的语法:

int[] numbers = {1, 2, 3, 4, 5};

我正在尝试对对象上的属性使用类似的语法:

MyClass myinst = new MyClass();              // See Class Definition below
myinst.MinMax = {-3.141, 3.141};             // Invalid Expression
myinst.MinMax = new double[]{-3.141, 3.141}; // Works, but more verbose

我可以像我想要的语法一样做任何事情吗?


类定义
class MyClass
{
    public double[] MinMax
    {
        set
        {
            if (value.Length != 2) throw new ArgumentException();
            _yMin = value[0];
            _yMax = value[1];
        }
    }
};

对 C# 属性使用初始值设定项语法

double语法是多余的,因为数组的类型可以通过属性的类型推断出来,所以你能做的最好的事情是这样的:

myinst.MinMax = new[] {-3.141, 3.141};

你可以删除double但除此之外,这一切都是必需的。

myinst.MinMax = new [] {-3.141, 3.141}; 

如果你真的想缩短它,你可以创建一个这样的帮助程序函数,但这是一个额外的函数调用(没什么大不了的,只是要知道一些事情)。

private static void Main()
{
    int[] a = A(1, 2, 3);
    double[] b = A(1.2, 3.4, 1);
}
private static T[] A<T>(params T[] array)
{
    return array;
}

最短的有效形式是:

myinst.MinMax = new[] { -3.141, 3.141 };

您提到的较短形式称为数组初始值设定项,但不能在属性设置器中使用它。原因是数组初始值设定项实际上不是表达式,调用属性 setter 需要在右侧使用表达式。数组初始值设定项仅在字段声明、局部变量声明或数组创建表达式(即 new[] { -3.141, 3.141 } )。