我想建立自己在通过与卷曲护腕多个参数初始化C#类,像string[]
我可以创建一个可以用卷曲护腕进行初始化的自定义类吗?
string[] x = new string[] {
"string1",
"string2",
"string3"
}
这可能吗?
编辑我很抱歉没有让自己清楚。我想要一个可以用优雅的方式初始化的类,其参数可变。
我想建立自己在通过与卷曲护腕多个参数初始化C#类,像string[]
我可以创建一个可以用卷曲护腕进行初始化的自定义类吗?
string[] x = new string[] {
"string1",
"string2",
"string3"
}
这可能吗?
编辑我很抱歉没有让自己清楚。我想要一个可以用优雅的方式初始化的类,其参数可变。
要支持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);
你的上面的语法是用于初始化一个数组,不是类。你可以,但是,通过构造函数初始化类的属性,如:
MyClass foo = new MyClass()
{
X = 1,
Y = 2
};
这是一样的做:
MyClass foo = new MyClass();
foo.X = 1;
foo.Y = 2;
哦,绝对看看dtb关于“Collection Initializers”的回答 - 我已经忘记了:) – 2012-02-01 20:33:16
是的,它是!正弦C#3.0(我认为)任何实例可以使用列表初始化器初始化!
例子:
class Foo
{
public int X { get; set; }
public int Y { get; set; }
}
Foo f = new Foo() { X = 10, Y = 20 };
2道具同名的道具不会发生。 – JonH 2012-02-01 20:33:26
@JonH:哪两个道具?,对不起,被纠正了! – Mithrandir 2012-02-01 20:35:16
它现在被编辑。看看编辑队列。 – JonH 2012-02-01 20:35:49
见这里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}
};
我不知道是否服用一个IEnumerable作为构造函数的参数就足够了... – gap 2012-02-01 20:29:24
是关键功能使用大括号,开放式参数列表,还是别的? – CodeGnome 2012-02-01 20:31:42
你期待你的语法看起来像什么?什么结果?希望初始化的列表中的单个元素的形状是什么? – 2012-02-01 20:32:12