存储库方法创建之间的差异

时间:2013-12-02 18:07:10

标签: c# repository

有人可以告诉我区别:

IQueryable<T> GetAll<T>();

IQueryable<T> GetAll();

GetAll之后的<T>是什么?

2 个答案:

答案 0 :(得分:2)

这更有意义。请使用代码标签。

<T>用于表示通用参数,您可以向其添加任何类型(前提是您没有违反任何约束)。

示例:

var result1 = GetAll<string>();
var result2 = GetAll<int>();

两者都将使用第一种方法。

如果您想使用第二个,请使用

var result = GetAll();

MSDN on generics

您可能希望这样做的一个原因是此示例实现:

IQueryable<T> GetAll<T>() {
    return someDataContext.Users.OfType<T>();
}

调用
var managers = GetAll<Manager>();

工作样本:

void Main()
{
    printTypes<string>();
}

static void printTypes<T>() {
    var myList = new List<Object> {"string 1", "string 2", 5 };
    foreach(var item in myList.OfType<T>()) {
        Console.WriteLine (item);
    }
}

输出

  

字符串1
  string 2

答案 1 :(得分:0)

这两种:

IQueryable<T> GetAll<T>();

IQueryable<T> GetAll();

使用Generics

  • GetAll<T><T>中的GetAll<T>是一种通用方法。 T有 方法级别范围。
  • GetAll():返回类级别通用IQueryable<T>
  • 的非泛型方法

GetAll不是.NET框架方法。而是存储库代码中的自定义定义。如果没有这两种方法的实现,没有人可以告诉你在某些给定方案中使用哪一种方法。话虽如此,我希望一个写得很好的实现是可以互换的。如果我不得不猜测,GetAll()可以作为没有类型T参数的方法的泛型类型推断的替代。然后,调用者可以对GetAll进行无参数调用,而无需指定类型GetAll<Entity>本身。