我确信有一种方法可以轻松创建一个类的实例,但我对伟大的interwebs的搜索还没有找到它。让我说我有这个:
List<LicencedCustomer> leftList = new List<LicencedCustomer>();
leftList.Add(new LicencedCustomer (LMAA_CODE:"1",LICENSE_NUMBER:"1",TRADING_NAME:"Bobs Liquor",STATE:"NSW",POSTCODE:"2261"));
我的课程如下所示。
public class LicencedCustomer
{
public string LMAA_CODE {get; set;}
public string LICENSE_NUMBER {get; set;}
public string TRADING_NAME {get; set;}
public string STATE {get; set;}
public string POSTCODE {get; set;}
public LicencedCustomer(string LMAA_CODE, string LICENSE_NUMBER, string TRADING_NAME, string STATE, string POSTCODE)
{
this.LMAA_CODE = LMAA_CODE;
this.LICENSE_NUMBER = LICENSE_NUMBER;
this.TRADING_NAME = TRADING_NAME;
this.STATE = STATE;
this.POSTCODE = POSTCODE;
}
...
如果没有上面的构造函数,我会收到一个错误,即该类不包含带有5个参数的构造函数(最初我只使用了值而没有使用List.Add函数中的字段名称)。
是否有一个快捷方式允许在创建时分配属性,而无需显式定义构造函数?
谢谢!
编辑:广泛的好奇心源于大写的属性 - 它们只是这样,因为它们是为了反映导入文件的标题而构建的。不是我喜欢的方法!
答案 0 :(得分:4)
添加默认构造函数,然后尝试类似:
new LicencedCustomer() { LMAA_CODE = ..., LICENSE_NUMBER = ..., ... };
附注:大写属性并不常见。
答案 1 :(得分:4)
使用new()时,调用与参数匹配的构造函数。如果没有已定义的构造函数,则会得到一个隐式参数less constructor。
要使用快捷方式初始化程序,请使用类似的内容。
public class sCls
{
public int A;
public string B;
}
static void Main(string[] args)
{
sCls oCls = new sCls() {A = 4, B = "HI"};
}
修改
如果您添加一个带有参数的consturctor,则从注释中删除了implict无参数构造函数
public class sCls
{
public sCls(string setB)
{
B = setB;
}
public int A;
public string B;
}
static void Main(string[] args)
{
sCls oCls = new sCls() {A = 4, B = "HI"}; // ERROR error CS1729: 'csCA.Program.sCls' does not contain a constructor that takes 0 arguments
}
您还可以将任何构造函数与初始化列表
一起使用public class sCls
{
public sCls(string setB)
{
B = setB;
}
public int A;
public string B;
}
static void Main(string[] args)
{
sCls oCls = new sCls("hi") {A = 4, B = "HI"};
}
请记住,在所有情况下,构造函数都在初始化列表之前调用,即使它具有参数less constructor。因此,基类构造或在对象构造中发生的任何其他事情都将首先发生。
public class BSE
{
public BSE()
{
BaseA = "Bob";
}
public string BaseA;
}
public class sCls :BSE
{
public int A;
public string B;
}
static void Main(string[] args)
{
sCls oCls = new sCls() {A = 4, B = "HI" };
Console.WriteLine("{0}", oCls.BaseA);//Prints Bob
}