2013-10-15 2 views
3
C# Property

В C#, это справедливо синтаксис:Использование Initializer Синтаксис на

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 }).

 Смежные вопросы

  • Нет связанных вопросов^_^