C# 中的集合初始值设定项

发布于 2024-12-11 19:49:49 字数 406 浏览 0 评论 0原文

在 Java 中,我可以创建一个列表并立即使用静态初始值设定项填充它。像这样的东西:


List <String> list = new ArrayList<String>()
{{
    Add("a");
    Add("b");
    Add("c");
}}

这很方便,因为我可以动态创建列表,并将其作为参数传递给函数。像这样的事情:


printList(new ArrayList<String>()
{{
    Add("a");
    Add("b");
    Add("c");
}});

我是 C# 新手,试图找出如何做到这一点,但一无所获。这在 C# 中可能吗?如果可以的话,该怎么办呢?

In Java, I can create an List and immediately populate it using a static initializer. Something like this:


List <String> list = new ArrayList<String>()
{{
    Add("a");
    Add("b");
    Add("c");
}}

Which is convenient, because I can create the list on the fly, and pass it as an argument into a function. Something like this:


printList(new ArrayList<String>()
{{
    Add("a");
    Add("b");
    Add("c");
}});

I am new to C# and trying to figure out how to do this, but am coming up empty. Is this possible in C#? And if so, how can it be done?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

近箐 2024-12-18 19:49:49

您可以使用集合初始值设定项:

new List<string> { "a", "b", "c" }

这会编译为对 Add 方法的一系列调用。
如果 Add 方法采用多个参数(例如字典),则需要将每个调用包装在一对单独的大括号中:

new Dictionary<string, Exception> {
    { "a", new InvalidProgramException() },
    { "b", null },
    { "c", new BadImageFormatException() }
}

You can use a collection initializer:

new List<string> { "a", "b", "c" }

This compiles to a sequence of calls to the Add method.
If the Add method takes multiple arguments (eg, a dictionary), you'll need to wrap each call in a separate pair of braces:

new Dictionary<string, Exception> {
    { "a", new InvalidProgramException() },
    { "b", null },
    { "c", new BadImageFormatException() }
}
傲性难收 2024-12-18 19:49:49

C# 3.0 开始,您也可以这样做:

List <String> list = new List<String>
                     {
                             "a", "b", "c"
                     };

MSDN,集合初始值设定项

集合初始值设定项可让您指定一个或多个元素
当你初始化一个实现了的集合类时初始化器
IE可数。元素初始值设定项可以是一个简单的值,
表达式或对象初始值设定项。通过使用集合初始值设定项
您不必指定多次调用 Add 方法
源代码中的类;编译器添加调用。

编辑:回答有关字典的评论

IDictionary<string, string> map = new Dictionary<string, string>
{
   { "Key0", "Value0" },
   { "Key1", "Value1" }
};

Since C# 3.0 you can do it as well:

List <String> list = new List<String>
                     {
                             "a", "b", "c"
                     };

MSDN, Collection Initializers

Collection initializers let you specify one or more element
intializers when you initialize a collection class that implements
IEnumerable. The element initializers can be a simple value, an
expression or an object initializer. By using a collection initializer
you do not have to specify multiple calls to the Add method of the
class in your source code; the compiler adds the calls.

EDIT: Answer to comment regarding dictionary

IDictionary<string, string> map = new Dictionary<string, string>
{
   { "Key0", "Value0" },
   { "Key1", "Value1" }
};
两仪 2024-12-18 19:49:49

是的,MSDN 此处对此进行了描述

Yes, it's described on MSDN here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文