[英]Why can I not create this implicitly-typed array?
这是我的代码:
AccountMenuList = new[]
{
new {transKey = "MY_TICKETS", stateName="account.tickets", displayUrl="/account/tickets/"},
new {transKey = "TRANSACTION_HISTORY", stateName = "account.transactionhistory", displayUrl = "/account/transactions"},
new {transKey = "PAYIN", stateName = "account.payin",displayUrl = "/account/payin"},
new {transKey = "PAYOUT", stateName = "account.payout", displayUrl = "/account/payout"},
new {transKey = "TICKET_PAYOUT", stateName = "account.ticketpayout", displayUrl = "/account/ticketpayout"},
new {transKey = "SETTINGS",stateName="default",displayUrl="default",SubMenuList=new[]{new{transKey = "something"}}}
};
但是我收到以下错误:
找不到隐式类型数组的最佳类型
怎么了? 我可以解决这个问题吗?
怎么了?
对于每个匿名类型,编译器都会在后台创建一个实际类型,并且所有具有相同声明的对象都属于一种类型,但最后一种除外:
new {transKey = "SETTINGS",stateName="default",displayUrl="default",SubMenuList=new[] {new{transKey = "something"}}
如何解决?
为菜单项创建自定义类型,这会更有意义,因为稍后您可能希望动态添加/删除/过滤它们。
通过将object
添加到数组初始化中,您可以显式创建对象数组(其中具有不同的匿名类型实例):
var accountMenuList = new object[] { new {transKey = "MY_TICKETS", stateName="account.tickets", displayUrl="/account/tickets/"}, new {transKey = "TRANSACTION_HISTORY", stateName = "account.transactionhistory", displayUrl = "/account/transactions"}, new {transKey = "PAYIN", stateName = "account.payin",displayUrl = "/account/payin"}, new {transKey = "PAYOUT", stateName = "account.payout", displayUrl = "/account/payout"}, new {transKey = "TICKET_PAYOUT", stateName = "account.ticketpayout", displayUrl = "/account/ticketpayout"}, new {transKey = "SETTINGS",stateName="default",displayUrl="default",SubMenuList=new[]{new{transKey = "something"}}} };
从最后一个条目中删除SubMenuList=new[]{new{transKey = "something"}}
。 所有条目必须具有相同的数据类型,隐式类型的数组才能工作。
像其他人指出的那样。 在这种情况下,您可能要创建一个类。 这是一个例子。
public class mydata
{
public string transKey { get; set; }
public string stateName { get; set; }
public string displayUrl{ get; set; }
}
然后,我将使用类型列表。
List<mydata> myDataList = new List<mydata>();
要添加到列表中,您可以这样做。
// create object
mydata md = new mydata();
md.transKey = "MY_TICKETS";
md.stateName = "account.tickets";
md.displayUrl = "/account/tickets/";
// add to your list
myDataList.add(md);
如果要遍历myDataList,可以执行以下操作。
foreach(var items in myDataList)
{
response.write(items.transkey);
}
我希望这有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.