在C#属性上使用初始化程序语法

时间:2013-10-15 03:35:28

标签: c# arrays initializer

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

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分: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;
}

答案 2 :(得分:0)

最短的有效表格是:

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

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