在这种情况下,非泛型方法不能与类型参数一起使用是什么意思?

时间:2014-07-04 12:10:10

标签: c#

我有以下课程和方法:

public class UserManager<TUser, TKey> : IDisposable
    where TUser : class, global::Microsoft.AspNet.Identity.IUser<TKey>
    where TKey : global::System.IEquatable<TKey> {

   public virtual Task<TUser> FindByIdAsync(TKey userId);

private ApplicationUserManager _userManager;
    public ApplicationUserManager UserManager
    {
        get
        {
            return _userManager ?? Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
        }
        set
        {
            _userManager = value;
        }
    }

public class ApplicationUserManager : UserManager<ApplicationUser, int>
public class ApplicationUser : IdentityUser<int, CustomUserLogin, CustomUserRole, CustomUserClaim>

我试图像这样调用这个方法:

var user = await UserManager.FindByIdAsync<ApplicationUser,int>(99);

它给了我错误:

非通用方法

  

&#39; Microsoft.AspNet.Identity.UserManager.FindByIdAsync(INT)&#39;   不能与类型参数一起使用

2 个答案:

答案 0 :(得分:11)

如错误所示,FindByIdAsync不接受类型参数。这些存在于声明类UserManager<TUser, TKey>

var user = await UserManager.FindByIdAsync(99);

答案 1 :(得分:6)

该方法声明为:

public virtual Task<TUser> FindByIdAsync(TKey userId);

而不是:

public virtual Task<TUser> FindByIdAsync<T, U>(TKey userId);

该方法不是通用的,因此在调用时不能传递类型。

修复是通过调用它而不是类型:

var user = await UserManager.FindByIdAsync(99);