尽管定义了where TRelatedEntity : Entity
,为什么以下表达式不能转换?
internal class RelationshipResolver<TEntity> where TEntity : Entity
{
private readonly List<Expression<Func<TEntity, Entity>>> toOneExpressions =
new List<Expression<Func<TEntity, Entity>>>();
internal RelationshipResolver<TEntity> Include<TRelatedEntity>(
Expression<Func<TEntity, TRelatedEntity>> oneToOnerelationship)
where TRelatedEntity : Entity
{
toOneExpressions.Add(oneToOnerelationship);
return this;
}
...
toOneExpressions.Add(oneToOnerelationship)
的编译错误:
Argument 1: cannot convert from 'System.Linq.Expressions.Expression<System.Func<TEntity, TRelatedEntity>>' to 'System.Linq.Expressions.Expression<System.Func<TEntity, Microsoft.Xrm.Sdk.Entity>>'
C#编译器does not infer nested generic types。
Expression<Func<TEntity, TRelatedEntity>>
是嵌套的泛型类型。在编译时都不会推断TEntity
和TRelatedEntity
。因此,编译器不知道Func<TEntity, TRelatedEntity>
是否可分配给Func<TEntity, Entity>
。
例如,没有嵌套的泛型类型,您的类应该可以工作(尽管可能不是您想要的):
internal class RelationshipResolver<TEntity> where TEntity : Entity
{
private readonly List<Func<TEntity, Entity>> toOneExpressions =
new List<Func<TEntity, Entity>>();
internal RelationshipResolver<TEntity> Include<TRelatedEntity>(
Func<TEntity, TRelatedEntity> oneToOnerelationship)
where TRelatedEntity : Entity
{
toOneExpressions.Add(oneToOnerelationship);
return this;
}
}