sub-class 相关 linq 表达式的字典
Dictionary of sub-class related linq expressions
考虑以下代码示例,建模基础和子类:
class Entity
{
}
class Dough : Entity
{
}
class Bread : Entity
{
IEnumerable<Dough> TypesOfDough { get; set; }
}
class Baker : Entity
{
IEnumerable<Bread> TypesOfBread { get; set; }
}
我可以像这样使用 LINQ 表达式来表达属性:
Expression<Func<Bread, IEnumerable<Dough>>> BreadDough = bread => bread.TypesOfDough;
Expression<Func<Baker, IEnumerable<Baker>>> BakerBread = baker => baker.TypesOfBread;
所以,我有以下表达式类型:
Expression<Func<Bread, IEnumerable<Dough>>>
Expression<Func<Baker, IEnumerable<Baker>>>
有什么方法可以通过它们的基类型来定义可以存储这两个表达式的字典类型吗?
我试过了,但我的猜测是,协方差或逆方差不允许。
不,所有 类 对于它们的通用类型参数都是不变的。但即使它们不是,或者您存储的是委托而不是表达式,您仍然无法利用方差。方差允许您将两个委托的 return 类型视为 IEnumerable<Entity>
,但您不能将两个输入值都视为 Entity
对象,因为 您的方法无法转换任何实体进入其指定的输出。输入是逆变的,这将不允许您统一所有参数的类型。
考虑以下代码示例,建模基础和子类:
class Entity
{
}
class Dough : Entity
{
}
class Bread : Entity
{
IEnumerable<Dough> TypesOfDough { get; set; }
}
class Baker : Entity
{
IEnumerable<Bread> TypesOfBread { get; set; }
}
我可以像这样使用 LINQ 表达式来表达属性:
Expression<Func<Bread, IEnumerable<Dough>>> BreadDough = bread => bread.TypesOfDough;
Expression<Func<Baker, IEnumerable<Baker>>> BakerBread = baker => baker.TypesOfBread;
所以,我有以下表达式类型:
Expression<Func<Bread, IEnumerable<Dough>>>
Expression<Func<Baker, IEnumerable<Baker>>>
有什么方法可以通过它们的基类型来定义可以存储这两个表达式的字典类型吗?
我试过了,但我的猜测是,协方差或逆方差不允许。
不,所有 类 对于它们的通用类型参数都是不变的。但即使它们不是,或者您存储的是委托而不是表达式,您仍然无法利用方差。方差允许您将两个委托的 return 类型视为 IEnumerable<Entity>
,但您不能将两个输入值都视为 Entity
对象,因为 您的方法无法转换任何实体进入其指定的输出。输入是逆变的,这将不允许您统一所有参数的类型。