繁体   English   中英

为什么不能创建此隐式类型的数组?

[英]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"}}

如何解决?

  1. 为菜单项创建自定义类型,这会更有意义,因为稍后您可能希望动态添加/删除/过滤它们。

  2. 通过将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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM