我有以下课程
public class ListCode : List<int>
{
public string Code { get; set; }
}
可以通过这种方式初始化:
ListCode myList = new ListCode() { 1, 2, 3};
myList.Code = "bar";
但它也可以这样初始化:
ListCode myList = new ListCode() { Code = "bar"};
myList.AddRange(new[] { 1, 2, 3 });
还有一种方法可以在一行中完成吗?像
ListCode myList = new ListCode() { 1, 2, 3, Code = "bar" }; //invalid syntax
答案 0 :(得分:2)
如果我错了,请纠正我,但这是因为这是语法糖&#39;。两种初始化类型都涉及两种不同的东西..
ListCode myList = new ListCode() { 1, 2, 3};
类似于
ListCode myList = new ListCode();
myList.Add(1); // myList[0] = 1;
myList.Add(2); // myList[1] = 2;
myList.Add(3); // myList[2] = 3;
ListCode myList = new ListCode() { Code = "bar"};
与
相同ListCode myList = new ListCode();
myList.Code = "bar";
您不能将这些混合起来,因为编译器将它们解释为一个或另一个。
然而,这是可能的......
public class ListCode : List<int>
{
public ListCode(string code)
{
this.Code = code;
}
public string Code { get; set; }
}
...
ListCode myList = new ListCode("bar") { 1, 2, 3 };
答案 1 :(得分:2)
您可以实现一个也由List实现的附加构造函数(传递IEnumerable)
public class ListCode : List<int>
{
public ListCode(IEnumerable<int> content) : base(content) { }
public string Code { get; set; }
}
这允许您将内容作为参数传递给构造函数,并且您可以使用其他属性初始化进行实例化
var t = new ListCode(new [] { 1, 2, 3 }) { Code = "test" };
答案 2 :(得分:2)
根据评论中的引用似乎不可能做,但我可以建议使用构造函数参数:
public class ListCode : List<int>
{
public ListCode(string code)
{
Code = code;
}
public string Code { get; set; }
}
ListCode myList = new ListCode("bar") { 1, 2, 3};
这似乎是最干净的:)