用C#编写通用函数的挑战

时间:2018-10-10 15:00:08

标签: c# generics frameworks entity

我有一个具有以下签名的功能

string[] GetUserRoleIdsWithAccess<TEntity, T>(TEntity entity) where TEntity 
: IEntity<T>, IAclSupported;

我尝试在类似这样的其他功能中使用它

 _aclService.GetUserRoleIdsWithAccess(entity).ToList();

其中实体是在以下函数中定义的:

void PrepareModelUserRoles<TModel, TEntity, T>(TModel model, TEntity entity, bool ignoreAclMappings)
        where TModel : IAclSupportedModel where TEntity : IEntity<T>, IAclSupported

但是,我不断得到

The type arguments for method 
'IAclService.GetUserRoleIdsWithAccess<TEntity, T>(TEntity)' cannot be 
inferred from the usage. Try specifying the type arguments explicitly.  

请问我该怎么做。

1 个答案:

答案 0 :(得分:0)

这是C#类型推断的限制。要解决此问题,您应该明确输入类型,如您的问题评论中所述:

(用正确的类型替换T1和T2)

_aclService.GetUserRoleIdsWithAccess<T1, T2>(entity).ToList();