public interface ICardEntity { ... }
public class Card : ICardEntity { ... }
public static class MyExtensions
{
public static List<T> ToList<T>(this IQueryable<T> query) where T : ICardEntity
{ ... }
}
// DbContext
public class ApplicationDbContext : DbContext
{
public DbSet<Card> Cards { get; set; }
}
.....
var list = dbContext.Cards
.ToList(); // -- OK, my extension is called
var list2 = dbContext.Cards
.GroupBy(t => new { Type = t.Type})
.ToList(); // -- Compile error. Why not System.Linq.Enumerable.ToList() is called?
我想調用我ToList只爲IQueryable的< ICardEntity>,而不是IGrouping < <匿名類型:短H>,卡>。爲什麼約束「T:ICardEntity」不起作用?C#在擴展忽略與泛型類型約束
錯誤消息:
類型「System.Linq.IGrouping < <匿名類型:短H>, Nucleo.Tests.Models.Card>不能被用作類型參數 'T'泛型類型或方法'MyExtensions.ToList(IQueryable)'。 不是從 'System.Linq.IGrouping <, Nucleo.Tests.Models.Card>'到'ICardEntity'的隱式參考轉換。
泛型類型約束在重載解析中不起作用。 –
順便說一句,沒有必要創建一個匿名類型:'GroupBy(t => new {Type = t.Type})''。爲什麼不'GroupBy(t => t.Type)'? –