对 C# 属性使用初始值设定项语法
本文关键字:语法 属性 | 更新日期: 2023-09-27 18:35:34
在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];
}
}
};
double
语法是多余的,因为数组的类型可以通过属性的类型推断出来,所以你能做的最好的事情是这样的:
myinst.MinMax = new[] {-3.141, 3.141};
你可以删除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;
}
最短的有效形式是:
myinst.MinMax = new[] { -3.141, 3.141 };
您提到的较短形式称为数组初始值设定项,但不能在属性设置器中使用它。原因是数组初始值设定项实际上不是表达式,调用属性 setter 需要在右侧使用表达式。数组初始值设定项仅在字段声明、局部变量声明或数组创建表达式(即 new[] { -3.141, 3.141 }
)。