2

在第一行,我得到这个编译错误。“类型参数声明必须是标识符而不是类型。”。有没有办法解决这个问题?

 public class ExtJsGridJsonModel<IEnumerable<T>>
{
    [DataMember(Name = "total")]
    public int Total { get; set; }

    [DataMember(Name = "rows")]
    public IEnumerable<T> Rows { set; get; }

    public ExtJsGridJsonModel(IEnumerable<T> rows, int total)
    {
        this.Rows = rows;
        this.Total = total;
    }
}

更新:

抱歉,我的问题和意图缺乏细节。基本上,我的最终目标是这样做:

new ExtJsGridJsonModel<Company>();

而不是这个:

new ExtJsGridJsonModel<IEnumerable<Company>>();

基本上,我想通过省略 IEnumerable 类型来减少代码。我该怎么做呢?

4

2 回答 2

5

只需取出IEnumerable您的声明部分:

public class ExtJsGridJsonModel<T>
{
    [DataMember(Name = "total")]
    public int Total { get; set; }

    [DataMember(Name = "rows")]
    public IEnumerable<T> Rows { set; get; }

    public ExtJsGridJsonModel(IEnumerable<T> rows, int total)
    {
        this.Rows = rows;
        this.Total = total;
    }
}
于 2013-02-22T17:11:10.680 回答
1

我假设您将使用它来存储本质上是一组二维值:

public class ExtJsGridJsonModel<T> where T : IEnumerable
{
    [DataMember(Name = "total")]
    public int Total { get; set; }

    [DataMember(Name = "rows")]
    public IEnumerable<T> Rows { set; get; }

    public ExtJsGridJsonModel(IEnumerable<T> rows, int total)
    {
        this.Rows = rows;
        this.Total = total;
    }
}

如果不是,或者T实际上是一个强类型的行类,那么可以去掉该where T : IEnumerable子句

于 2013-02-22T17:06:58.863 回答