泛型类的静态Create()方法的紧凑语法?

时间:2014-10-21 20:38:38

标签: c# generics constructor

我有一对班级。这些都是从我的项目中复制/粘贴:

public static class PageResult
{
    public static PageResult<T> Create<T>(int totalCount, IList<T> items)
    {
        return new PageResult<T>()
        {
            TotalCount = totalCount,
            Items = items,
        };
    }
}

public class PageResult<T>
{
    public int TotalCount { get; set; }
    public IList<T> Items { get; set; }
}

我这样做的原因是我可以使用PageResult.Create(5, listOf5Items)而不是任何其他更长的语法。我没有将“创建”方法放在PageResult(T)课程中,因为我非常确定这需要我输入PageResult<int>(5, listOf5Numbers),而且需要额外的五个字符。

但是有两个课程似乎相当蹩脚。有没有一种方法可以获得更紧凑的语法,而不需要一次性课程来存储它?

2 个答案:

答案 0 :(得分:2)

正如您已经指出的那样,您必须指定类型参数才能访问Create函数,因为特定的PageResult<T>类甚至不会存在,直到JIT在方法启动时创建它叫它。请参阅Tuples以获取.NET Framework本身的实例,仅基于相同的原因执行此模式。

请注意,另一个选项是使PageResult类非static,并继承PageResult<T> : PageResult,这将允许您存储没有类型的PageResult对象的集合参数。如果您使用abstract PageResult

,这也很有用

答案 1 :(得分:1)

没有。您可以创建一个VS片段(或其他一些可以生成源代码的插件/工具)来为您输入一些样板文件,但最终代码需要在那里。