Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.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# 我不断收到此错误消息,我不知道';我不知道为什么_C# - Fatal编程技术网

C# 我不断收到此错误消息,我不知道';我不知道为什么

C# 我不断收到此错误消息,我不知道';我不知道为什么,c#,C#,错误消息是: “_djv.Authenticator”不包含“authenticate”的定义 并且没有扩展方法“authenticate”接受 找不到类型“\u djv.Authenticator”(是否缺少使用 指令还是程序集引用?)我的代码在下面,我有一个 控制台应用程序和一个名为authenticator的类,两者都是 代码在下面 namespace\u验证器 { 公共类验证器 { 私有字典字典=新字典(); 公共验证器() { 添加(“用户名1”、“密码1”); 添加(“用户名2”、“

错误消息是:

“_djv.Authenticator”不包含“authenticate”的定义 并且没有扩展方法“authenticate”接受 找不到类型“\u djv.Authenticator”(是否缺少使用 指令还是程序集引用?)我的代码在下面,我有一个 控制台应用程序和一个名为authenticator的类,两者都是 代码在下面

namespace\u验证器
{
公共类验证器
{
私有字典<字符串,字符串>字典=新字典<字符串,字符串>();
公共验证器()
{
添加(“用户名1”、“密码1”);
添加(“用户名2”、“密码2”);
添加(“用户名3”、“密码3”);
添加(“用户名4”、“密码4”);
添加(“用户名5”、“密码5”);
}
公共bool身份验证(字符串用户名、字符串密码)
{
bool=false;
if(dictionary.ContainsKey(用户名)&&dictionary[username]==密码)
{
已验证=真;
}
其他的
{
认证=假;
}
返回认证;
}
}
}
使用_认证器;
名称空间
{
类验证器
{
静态void Main(字符串[]参数)
{
Console.WriteLine(“请输入用户名”);
var username=Console.ReadLine();
Console.WriteLine(“请输入您的密码”);
var password=Console.ReadLine();
var auth=new Authenticator();
if(身份验证(用户名、密码))
Console.WriteLine(“有效用户名/密码组合”);
其他的
Console.WriteLine(“无效的用户名/密码组合”);
控制台写入线(“按回车键结束”);
Console.ReadLine();
}
}
}

类名冲突。您的
auth
变量引用
\u djv
命名空间中的类。指定类的全名以便能够使用它

var auth = new _Authenticator.Authenticator();
或者,可以为类创建别名。我建议在这里使用这种方法,因为它可以减少编写代码的繁琐

using Auth = _Authenticator.Authenticator;
(...)
var auth = new Auth();

实际上,我认为最好的办法是重命名其中一个类。一切都会变得越来越清晰。

您有两个名为
验证器的类。如果不显式指定名称空间,将使用当前名称空间中的类(在本例中,该类是错误的)

您可以通过以下方式解决此问题:

  • 显式创建正确类的实例

    var auth=new\u Authenticator.Authenticator()

  • 例如,将主类重命名为其他类,
    main


  • 我强烈推荐选项2,以防止进一步混淆。

    您的两个类都被命名为
    Authenticator
    。调用
    newauthenticator
    时,实际上是在创建代码所运行的类的实例,该类没有
    authenticate
    方法。您有两个具有相同名称Authenticator的类。它们是否在同一命名空间中?您必须已删除先前的问题。已经明确地告诉您,以这种方式设置类/名称空间是非常糟糕的代码。这是令人困惑的,并导致像这样容易避免的错误。您在
    \u djv
    中的
    验证器
    不应被称为
    验证器
    ,因为它不是验证器。更好的名称应该是
    AuthenticatorTester
    之类的名称。
    using Auth = _Authenticator.Authenticator;
    (...)
    var auth = new Auth();