C# 引用类MyClass中的类型参数数目不正确<;F、 T>;-通用实体框架

C# 引用类MyClass中的类型参数数目不正确<;F、 T>;-通用实体框架,c#,entity-framework,generics,C#,Entity Framework,Generics,我有以下通用抽象类: public abstract class MyClass<F, T> where TCurrencyFrom : Book where TCurrencyTo : Book { public int Id { get; set; } public virtual F First{ get; set; } public virtual T Second { get; set; } } 公共抽象类MyClass 从哪里来:

我有以下通用抽象类:

public abstract class MyClass<F, T>
    where TCurrencyFrom : Book
    where TCurrencyTo : Book
{
    public int Id { get; set; }
    public virtual F First{ get; set; }
    public virtual T Second { get; set; }
}
公共抽象类MyClass
从哪里来:书
去哪里:书
{
公共int Id{get;set;}
公共虚拟F First{get;set;}
公共虚拟T秒{get;set;}
}
我得到了3个实现这个类的类,比如:

public class Implementation1 : MyClass<BookType1, BookType2>
{
}

public class Implementation2 : MyClass<BookType2, BookType1>
{
}
公共类实现1:MyClass
{
}
公共类实现2:MyClass
{
}
现在我得到了一个“EntityTypeConfiguration”,它看起来像:

public class MyClassConfiguration<TMyClass> : EntityTypeConfiguration<TMyClass> where TMyClass: MyClass
{
    public MyClassConfiguration()
    {
        ...
    }
}
public类MyClassConfiguration:EntityTypeConfiguration其中TMyClass:MyClass
{
公共MyClassConfiguration()
{
...
}
}
并尝试使用以下方法:

public class Implementation1Map : MyClassConfiguration<Implementation1> 
{
    public Implementation1Map ()
    {
        ...
    }
}
公共类实现1Map:MyClassConfiguration
{
公共实施1Map()
{
...
}
}
但是我得到了以下错误:

引用类MyClass中的类型参数数目不正确


如何解决这个问题并确保对EntityTypeConfiguration有一个通用的方法?

不幸的是,对于.NET泛型来说,这很棘手

如果
MyClassConfiguration
实际上并不关心类型参数,您可能需要创建一个非泛型接口:

public interface IMyClass
{
    // Any members of MyClass<,> which don't rely on the type arguments,
    // e.g. the Id property
}
并更改
MyClassConfiguration
的类型约束:

public class MyClassConfiguration<TMyClass> : EntityTypeConfiguration<TMyClass>
    where TMyClass: IMyClass

这很难看,但它会工作。

不幸的是,这对于.NET泛型来说很棘手

如果
MyClassConfiguration
实际上并不关心类型参数,您可能需要创建一个非泛型接口:

public interface IMyClass
{
    // Any members of MyClass<,> which don't rely on the type arguments,
    // e.g. the Id property
}
并更改
MyClassConfiguration
的类型约束:

public class MyClassConfiguration<TMyClass> : EntityTypeConfiguration<TMyClass>
    where TMyClass: IMyClass

这很难看,但它会起作用。

where TCurrencyFrom:Book where TCurrencyTo:Book这正确吗???@K.B:编辑后以明显的方式重命名类型参数。如果没有接口,这是不可能的?因为在我看来,界面并没有添加任何东西。它只能用来“修复”这个问题。@Julian:如果你愿意,你可以把它变成一个非泛型抽象类,泛型类就是从这个抽象类派生出来的。但是您不能表示“
TMyClass:MyClass
的约束,但我不关心类型参数是什么”@JonSkeet但现在我无法使用MyClassConfiguration中的书籍。那么TCurrencyFrom:Book where TCurrencyTo:Book这是否正确呢?@K.B:Edited以明显的方式重命名类型参数。如果没有接口,这是不可能的?因为在我看来,界面并没有添加任何东西。它只能用来“修复”这个问题。@Julian:如果你愿意,你可以把它变成一个非泛型抽象类,泛型类就是从这个抽象类派生出来的。但是您不能表达“
TMyClass:MyClass
的约束,但我不关心类型参数是什么”。@JonSkeet但是现在我不能使用MyClassConfiguration中的书籍。