C# 我可以拥有多个类约束而不将约束设置为类型';类别';在C中#

C# 我可以拥有多个类约束而不将约束设置为类型';类别';在C中#,c#,type-constraints,generic-constraints,C#,Type Constraints,Generic Constraints,我有这个类,它是我规范模式的一部分。 此后 这适用于所有继承“BaseEntity”的实体 前 现在我想在我的“用户”实体上使用规范模式,这样我就可以提供规范/条件并获取用户列表 但我的问题是我的项目“用户”实体不继承“BaseEntity”,它继承“IdentityUser” 前 公共类用户:IdentityUser { } 我知道我不能有多个类作为约束,但我可以有多个接口 我知道我可以将约束设置为“类” 前 公共类规范评估器 地点:班级 { } 但是,这不是违背了创建特定约束的目的吗 问

我有这个类,它是我规范模式的一部分。 此后

这适用于所有继承“BaseEntity”的实体

现在我想在我的“用户”实体上使用规范模式,这样我就可以提供规范/条件并获取用户列表

但我的问题是我的项目“用户”实体不继承“BaseEntity”,它继承“IdentityUser”

公共类用户:IdentityUser
{
}
我知道我不能有多个类作为约束,但我可以有多个接口

我知道我可以将约束设置为“类”

公共类规范评估器
地点:班级
{
}
但是,这不是违背了创建特定约束的目的吗

问题-我是否可以实施另一种解决方案来同时使用“BaseEntity”和“User”
作为约束条件?

在我看来,您可能必须这样做:

public interface IIdentityUser<T>
{
    T Id { get; set; }
}

public class SpecificationEvaluator<TEntity, T>
    where TEntity : IIdentityUser<T>
{ }

public class BaseEntity : IIdentityUser<int>
{
    public int Id { get; set; }
}

public class Product : BaseEntity { }
public class Invoice : BaseEntity { }
public class Message : BaseEntity { }

public class IdentityUser<T> : IIdentityUser<T>
{
    public T Id { get; set; }
}

public class User : IdentityUser<int>
{
}
公共接口IIdentityUser
{
T Id{get;set;}
}
公共类规范评估器
其中tenty:IIdentityUser
{ }
公共类BaseEntity:IIdentityUser
{
公共int Id{get;set;}
}
公共类产品:BaseEntity{}
公共类发票:BaseEntity{}
公共类消息:BaseEntity{}
公共类标识用户:IIdentityUser
{
公共T Id{get;set;}
}
公共类用户:IdentityUser
{
}

不,where contrainst子句还不符合逻辑。这是否回答了您的问题?
public class BaseEntity
{
   public int Id { get; set; }
}
Product : BaseEntity
Invoice : BaseEntity
Message : BaseEntity
public class User : IdentityUser<int>
{
}
public class SpecificationEvaluator<TEntity> 
where TEntity : class
{
}
public interface IIdentityUser<T>
{
    T Id { get; set; }
}

public class SpecificationEvaluator<TEntity, T>
    where TEntity : IIdentityUser<T>
{ }

public class BaseEntity : IIdentityUser<int>
{
    public int Id { get; set; }
}

public class Product : BaseEntity { }
public class Invoice : BaseEntity { }
public class Message : BaseEntity { }

public class IdentityUser<T> : IIdentityUser<T>
{
    public T Id { get; set; }
}

public class User : IdentityUser<int>
{
}