我想在C#中构建我自己的类,该类由多个带有花括号的参数初始化,如string[]
string[] x = new string[] {
"string1",
"string2",
"string3"
}
有可能吗?
编辑我很抱歉没有说清楚。我想要一个可以用优雅的方式初始化的类,参数数量可变。
答案 0 :(得分:14)
要支持collection initializer syntax,您的班级需要实施IEnumerable并拥有公开的添加方法。
示例:的
class MyClass : IEnumerable<int>
{
public void Add(int value) { ... }
public IEnumerator<int> GetEnumerator() { ... }
IEnumerator IEnumerable.GetEnumerator() { ... }
}
用法:的
var myClass = new MyClass { 1, 2, 3, 4, 5 };
或者,您可以定义一个带有可变数量参数的构造函数。您可以使用params keyword。
执行此操作示例:的
class MyClass
{
public MyClass(params int[] args) { ... }
}
用法:的
var myClass = new MyClass(1, 2, 3, 4, 5);
答案 1 :(得分:3)
上面的语法用于初始化数组,而不是类。但是,您可以通过构造函数初始化类中的属性,例如:
MyClass foo = new MyClass()
{
X = 1,
Y = 2
};
这与做:
相同MyClass foo = new MyClass();
foo.X = 1;
foo.Y = 2;
答案 2 :(得分:1)
是的,它是!正弦C#3.0(我认为)可以使用列表初始化器初始化任何实例!
示例:
class Foo
{
public int X { get; set; }
public int Y { get; set; }
}
Foo f = new Foo() { X = 10, Y = 20 };
答案 3 :(得分:1)
在此处查看http://msdn.microsoft.com/en-us/library/bb397680.aspx
List<StudentName> students = new List<StudentName>()
{
new StudentName {FirstName="Craig", LastName="Playstead", ID=116},
new StudentName {FirstName="Shu", LastName="Ito", ID=112},
new StudentName {FirstName="Gretchen", LastName="Rivas", ID=113},
new StudentName {FirstName="Rajesh", LastName="Rotti", ID=114}
};