7

我正在使用 Asp.Net Identity 框架,并且我有一个 User 类,如下所示:

public class User : IUser
{
   public string Id {get; private set;}
   public string Email {get; set;}

   string IUser.UserName { get { return Email;} set { Email = value;}}
}

我刚刚升级到 Asp.Net Identity Framework 的第 2 版,并且开始出现编译错误“显式接口声明中的'IUser.UserName'不是接口的成员”。之前一切都很好。

怎么了?

4

1 回答 1

12

有两件事促成了这一点:

  1. 您正在显式实现 IUser 接口的 UserName 属性
  2. 在 Asp.Net Identity Framework 的第 2 版中,IUser 接口的定义发生了变化。UserName 属性现在在通用 IUser 接口上定义,非通用 IUser 接口继承自该接口。

当您显式实现接口时,C# 期望您使用派生最少的接口的名称来限定成员名称,而不是可能从它继承的接口的名称。

要修复您的代码,您需要执行以下操作:

public class User : IUser
{
   string IUser<string>.UserName { get { return Email;} set { Email = value;}}
}

奖金示例

这是一个生成相同错误消息的完整示例:

public interface Base
{
    string MyProperty { get; set; }
}

public interface Inherited : Base
{

}

public class Implementor : Inherited
{
    string Inherited.MyProperty { get; set; }
}
于 2014-05-13T11:13:32.817 回答