IEnumerable属性的模板?

时间:2014-02-03 11:20:08

标签: c#

有没有办法模拟这个类,以便我可以拥有一个可以存储IEnumerable<Whatever>的通用ListViewModel。所以而不是以下内容:

public class JamesListViewModel
{
    public IEnumerable<James> Jamess { get; set; }
    public PagingInfo PagingInfo { get; set; }
}

我会:

public class ListViewModel
{
    public IEnumerable<T> Items { get; set; }
    public PagingInfo PagingInfo { get; set; }
}

否则对于每个具有分页等的列表页面,我将不得不创建一个新的视图模型。更重要的是,如果我可以让后者工作。如果需要特定视图,我可以继承和优化。

2 个答案:

答案 0 :(得分:4)

您需要使该类具有通用性:

public class ListViewModel<T>
{
    public IEnumerable<T> Items { get; set; }
    public PagingInfo PagingInfo { get; set; }
}

然后,可以通过提供类型参数来创建实例:

var vm = new ListViewModel<string>();

多个类型参数可以用逗号分隔:

public class ListViewModel<T, U>
{
    public IEnumerable<T> Items { get; set; }
    public IEnumerable<U> OtherItems { get; set; }
    public PagingInfo PagingInfo { get; set; }
}

var vm = new ListViewModel<string, int>();

有关详细信息,请参阅this guide

答案 1 :(得分:2)

这样做:

public class ListViewModel<T>
{
    public IEnumerable<T> Items { get; set; }
    public PagingInfo PagingInfo { get; set; }
}

有关完整详细信息,请参阅MSDN文档:

http://msdn.microsoft.com/en-us/library/sz6zd40f.aspx