3

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

3 に答える 3

3

配列のdouble型はプロパティの型から推測できるため、構文は冗長です。そのため、できる最善の方法は次のとおりです。

myinst.MinMax = new[] {-3.141, 3.141};
于 2013-10-15T03:40:45.437 に答える
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;
}
于 2013-10-15T03:39:00.743 に答える
0

最短の有効な形式は次のとおりです。

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

あなたが言及した短い形式は配列初期化子と呼ばれますが、プロパティ セッターでは使用できません。その理由は、配列初期化子は実際には式ではなく、プロパティ セッターを呼び出すには右側に式が必要だからです。配列初期化子は、フィールド宣言、ローカル変数宣言、または配列作成式 (つまりnew[] { -3.141, 3.141 }) のコンテキストでのみ有効です。

于 2013-10-15T04:19:05.257 に答える