收到错误“找不到隐式类型数组的最佳类型”

时间:2012-06-28 12:37:41

标签: c# json implicit

这是我为jqGrid创建Json响应的代码,以及用于定义单元成员的 new 关键字,我收到以下消息“找不到隐式类型数组的最佳类型”。

var resRows = results.Select(record => 
            new 
            {
                id = record.Reference,
                cell = **new** []
                {
                    record.Reference,
                    record.TradeDate.ToShortDateString(),
                    record.Currency1,
                    record.Currency2,
                    record.Notional.ToString(),
                    record.EffectiveDate.ToShortDateString(),
                    record.Quote.ToString()                        
                }
            }).ToArray();

我在这里做错了什么?

4 个答案:

答案 0 :(得分:8)

假设ReferenceCurrency1Currency2是字符串,只需将其声明为字符串数组:

var resRows = results.Select(record => 

    new 
    {
        id = record.Reference,
        cell = new string []
        {
            record.Reference,
            record.TradeDate.ToShortDateString(),
            record.Currency1,
            record.Currency2,
            record.Notional.ToString(),
            record.EffectiveDate.ToShortDateString(),
            record.Quote.ToString()                        
        }
    }).ToArray();

答案 1 :(得分:1)

如果您为jqGrid准备数据(就像在代码中一样),您可以定义自己的jsonReader并跳过单元格数组(http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data):

jsonReader: {
        root: "rows",
        page: "page",
        total: "total",
        records: "records",
        repeatitems: false,
        userdata: "userdata"
    },

然后像:

var result = new
{
    total = (int)count / grid.PageSize),
    page = grid.PageIndex,
    records = count,
    rows = results.Select(record => 
                    select new
                    {
                        Reference = record.Reference,
                        TradeDate = record.TradeDate,
                        ..
                     }).ToArray()
}

答案 2 :(得分:0)

我遇到了同样的问题,发现如果数组中的所有数据项都是相同的类型(示例字符串),那么推断出类型并且编译器没有抱怨 new []

答案 3 :(得分:0)

如果集合的成员是函数,它仍然会给编译器错误。即使集合中只有一个函数!

var bads = new []  // COMPILER ERROR
{
    Foo
};

var goods = new Action[]  // NO COMPILER ERROR
{
    Foo
};

//...
public void Foo() { }