2013-10-15 97 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 })。