我在工作期间遇到了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” “值2” “VAL3”
但是!
static void Main(string[] args)
{
Foo foo = new Foo();
foo.bar = {"val1", "val2", "val3"};
}
抛出各种令人讨厌的编译器错误。
谷歌搜索结果没有回答,所以我转向了。为什么这不可能?答案 0 :(得分: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
Jon指出;如果你想更简洁,你可以使用对象初始化器:
static void Main()
{
var foo = new Foo { bar = new[] {"val1", "val2", "val3"} };
}