2

仕事中に文字列配列型のプロパティに出くわし、それについて賢く、値の匿名配列を追加することにしました。驚いたことに、それは不可能ですか?

class Foo
{
    public String[] bar { get; set; }
}

static void Main(string[] args)
{
   Foo foo = new Foo();
   String[] arr = { "val1", "val2", "val3" };
   foo.bar = arr;
   foreach (String bar in foo.bar)
    {
            Console.WriteLine(bar);
    }
 }

驚くことではありませんが、次のように出力されます: "val1" "val2" "val3"

しかし!

static void Main(string[] args)
{
    Foo foo = new Foo();
    foo.bar = {"val1", "val2", "val3"};
}

あらゆる種類の厄介なコンパイラ エラーをスローします。

グーグルで答えが見つからなかったので、SOに目を向けています。なぜこれが不可能なのですか?

4

1 に答える 1

4

配列が必要であることを伝えていません。元の行で:

String[] arr = { "val1", "val2", "val3" };

必要なものを理解するのに十分な情報がありますが、初期化子を使用したそのような宣言の外では、さらに多くの情報が必要です。

static void Main(string[] args)
{
    Foo foo = new Foo();
    foo.bar = new[]{"val1", "val2", "val3"};
}

または(より具体的ですが、機能的には同一です):

static void Main(string[] args)
{
    Foo foo = new Foo();
    foo.bar = new string[3]{"val1", "val2", "val3"};
}

最初の方が望ましいと思います。間違うことが少ない;p

ジョンが指摘するように。さらに冗長にしたい場合は、オブジェクト初期化子を使用できます。

static void Main()
{
    var foo = new Foo { bar = new[] {"val1", "val2", "val3"} };
}
于 2013-08-20T08:15:51.007 に答える