【发布时间】:2009-02-11 07:02:36
【问题描述】:
在Java中,我喜欢使用诸如
之类的结构List<String> list = new ArrayList<String>() {{add("foo");}};
有没有办法在 C# 的 1 行中也做到这一点?
【问题讨论】:
标签: c# java class initialization anonymous-class
在Java中,我喜欢使用诸如
之类的结构List<String> list = new ArrayList<String>() {{add("foo");}};
有没有办法在 C# 的 1 行中也做到这一点?
【问题讨论】:
标签: c# java class initialization anonymous-class
这称为集合初始化器,它是 C# 3.0 的一部分。
除了列表之外,您还可以初始化更复杂类型的集合,只要它们实现 IEnumerable 并为集合初始化程序中的每个元素提供适当的 Add 方法。比如你可以像这样使用Dictionary<TKey, TValue>的Add(key, value)方法:
var dict = new Dictionary<string, int>
{
{"first", 10 },
{"second", 20 }
};
更多细节可以在C# in Depth的第8章找到,可以从Manning's web site免费下载。
【讨论】:
我认为你想要的是一个数组初始化器
List<string> list = new List<string>() { "foo" };
多个项目应以逗号分隔
List<string> list = new List<string>() { "foo","bar","bas"};
【讨论】:
您可以在 .NET 3.5 中设置属性值:
List<string> list = new List<string> () { Property = Value, Property2 = Value2 };
或者初始化一个数组:
List<string> list = new List<string> () { "value1", "value2" };
但是,您不能以这种方式调用方法。
【讨论】:
如果您只需要处理将对象添加到集合中,那么集合初始化器可以很好地工作,但是如果您需要执行更多静态初始化,您可以使用称为静态构造器的东西,它的工作原理与静态初始化器相同爪哇
This 的格式很差,但似乎覆盖了它
【讨论】: