有人可以告诉我区别:
IQueryable<T> GetAll<T>();
和
IQueryable<T> GetAll();
GetAll之后的<T>
是什么?
答案 0 :(得分:2)
这更有意义。请使用代码标签。
<T>
用于表示通用参数,您可以向其添加任何类型(前提是您没有违反任何约束)。
示例:
var result1 = GetAll<string>();
var result2 = GetAll<int>();
两者都将使用第一种方法。
如果您想使用第二个,请使用
var result = GetAll();
您可能希望这样做的一个原因是此示例实现:
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>
本身。