3

在 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];
        }
    }
};
4

3 回答 3

3

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

myinst.MinMax = new[] {-3.141, 3.141};
于 2013-10-15T03:40:45.437 回答
1

你可以放弃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;
}
于 2013-10-15T03:39:00.743 回答
0

最短的有效形式是:

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

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

于 2013-10-15T04:19:05.257 回答