2013-10-15 125 views
3

在C#中使用初始化语法,这是有效的语法:在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

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

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

它的遗憾我的首选语法不起作用,因为我不认为'new []'表示任何不能被编译器完全推断的东西。 – abelenky

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; 
} 
0

最短的有效形式为:

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

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