c# - 为什么不能将此表达式从使用泛型类型转换为使用基类型?
问题描述
尽管定义了 ,为什么不能转换以下表达式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# 编译器不会推断嵌套的泛型类型。
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;
}
}
推荐阅读
- indexing - Lucene Solr:是否可以使用术语权重进行索引?
- python - SQL Alchemy:加载模型和测试关系
- build - 我在哪里放置 [SuprressPropertyChangedWarnings] 以抑制 WPF 中的构建警告?
- python - 捕获最后一个时间戳,无需使用 Python 读取完整文件
- git - 不小心删除了我的 git 文件夹。如何将本地副本连接到仓库?
- python - Python TypeError:列表索引必须是整数或切片,而不是元组
- jquery - 将点击事件添加到传递给 div 的数组中的字符串元素
- c++ - 声明 lambda 然后立即调用以使用其返回值初始化局部变量是否有任何目的?
- java - 读取 java 属性文件,值一直为空
- python - 重采样数据集