C# 一行中的类初始化语法
我有以下课程C# 一行中的类初始化语法,c#,class,C#,Class,我有以下课程 public class ListCode : List<int> { public string Code { get; set; } } 但它也可以这样初始化: ListCode myList = new ListCode() { Code = "bar"}; myList.AddRange(new[] { 1, 2, 3 }); 有没有一种方法可以在同一行中实现这一点?像 ListCode myList = new ListCode() { 1, 2,
public class ListCode : List<int>
{
public string Code { get; set; }
}
但它也可以这样初始化:
ListCode myList = new ListCode() { Code = "bar"};
myList.AddRange(new[] { 1, 2, 3 });
有没有一种方法可以在同一行中实现这一点?像
ListCode myList = new ListCode() { 1, 2, 3, Code = "bar" }; //invalid syntax
如果我错了,请纠正我,因为这是“语法糖”。两种初始化器类型都处理两个不同的问题 索引初始化 类似于
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();
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 };
公共类列表code:List
{
公共列表代码(字符串代码)
{
这个。代码=代码;
}
公共字符串代码{get;set;}
}
...
listcodemylist=新的ListCode(“bar”){1,2,3};
您可以实现一个附加的构造函数,该构造函数也是通过List实现的(传递IEnumerable)
根据注释中的引用似乎不可能做到这一点,但我可以建议为此使用构造函数参数:
public class ListCode : List<int>
{
public ListCode(string code)
{
Code = code;
}
public string Code { get; set; }
}
ListCode myList = new ListCode("bar") { 1, 2, 3};
公共类列表code:List
{
公共列表代码(字符串代码)
{
代码=代码;
}
公共字符串代码{get;set;}
}
listcodemylist=新的ListCode(“bar”){1,2,3};
这似乎是你能得到的最干净的:)
与
相同,应该是与
相似。一个显著的区别是,对于初始值设定项,对象“在一边”创建,然后分配给变量-如果初始化代码引发异常,则会有区别。ListCode myList=new ListCode(){1,2,3}代码>不能与ListCode myList=new ListCode()相同;myList[0]=1代码>因为它抛出了一个ArgumentOutOfRangeException
小缺点:如果您希望对多个属性进行属性初始化,那么这将不再有效……是的,我看到您的答案,它就像反向版本:)但这当然取决于附加属性的可能性,哪一个更好。顺便说一下,您可以删除int
,使其更短
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 };
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" };
public class ListCode : List<int>
{
public ListCode(string code)
{
Code = code;
}
public string Code { get; set; }
}
ListCode myList = new ListCode("bar") { 1, 2, 3};