Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 编译错误';IUser.UserName';在显式接口中,声明不是接口的成员-为什么我会得到这个?_C#_Asp.net Identity_Asp.net Identity 2 - Fatal编程技术网

C# 编译错误';IUser.UserName';在显式接口中,声明不是接口的成员-为什么我会得到这个?

C# 编译错误';IUser.UserName';在显式接口中,声明不是接口的成员-为什么我会得到这个?,c#,asp.net-identity,asp.net-identity-2,C#,Asp.net Identity,Asp.net Identity 2,我使用的是Asp.Net Identity framework,我有一个如下所示的用户类: 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 Fra

我使用的是Asp.Net Identity framework,我有一个如下所示的用户类:

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'不是接口的成员”。以前一切都很好


发生了什么事

有两个原因:

  • 您正在显式地实现IUser接口的UserName属性
  • 在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; }
    }