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