将匿名数组添加到属性。不可能?

时间:2013-08-20 08:14:29

标签: c# arrays properties

我在工作期间遇到了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"};
}

抛出各种令人讨厌的编译器错误。

谷歌搜索结果没有回答,所以我转向了。为什么这不可能?

1 个答案:

答案 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"} };
}