2

我在工作期间遇到了 String 数组类型的属性,并决定对它进行聪明的处理,并为其添加一个匿名的值数组,因为我不需要一个我只会使用一次的值数组。但令我惊讶的是,这不可能吗?

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 回答