【问题标题】:Adding anonymous array to property. Not possible?将匿名数组添加到属性。不可能?
【发布时间】:2013-08-22 05:05:13
【问题描述】:

我在工作期间遇到了 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。为什么这是不可能的?

【问题讨论】:

  • 这个“匿名”的方式是什么?它没有使用匿名类型或匿名方法……据我所知,这段代码中的任何内容都与 C# 中“匿名”术语的任何使用相对应。

标签: c# arrays properties


【解决方案1】:

你还没有告诉它你想要一个数组;在您的原始行中:

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

【讨论】:

  • 您可能还想提及对象初始化器的选项。
猜你喜欢
  • 2010-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多