第一行代码被标记为无法访问,但第二行不是,为什么

本文关键字:为什么 访问 二行 记为 一行 代码 | 更新日期: 2023-09-27 18:34:25

>根据Visual Studio 2015,第一个case语句中的第一行代码无法访问,但我不明白为什么。同一 case 语句中的第二行代码未标记为无法访问,并且 default 语句中的所有代码都是可访问的。VS只是愚蠢还是我在这里错过了什么?

private static void LogToITSupport(string ErrorType)
{
    var Email = new MailMessage();
    Email.To.Add("");
    Email.From = new MailAddress("");
    switch ("ErrorType")
    {
        case "Database Connection":
            Email.Subject = "JobSight Error, unable to connect to database.";
            Email.Body = "JobSight is unable to connect to the JobSight database, this could indicate the databse is dow nor there is a server problem. Please investigate.";
            break;
        default:
            Email.Subject = "JobSight has encountered an unknown error.";
            Email.Body = "JobSight has encountered an unknown error and thinks that IT should fix it. Good Luck.";
            break;
    }
    var Client = new SmtpClient("");
    Client.Send(Email);
}

第一行代码被标记为无法访问,但第二行不是,为什么

回答您的实际问题。您正在打开文本字符串"ErrorType",您的选项是"数据库连接"或其他任何内容。

由于编译器正在查看文本字符串,因此它知道数据库连接永远不会是这种情况,因此无法访问。

例如,如果您将开关更改为"数据库连接",您会注意到第一行没问题,但默认情况下会收到该错误,因为编译器知道数据库连接是唯一可以访问的内容。

通过使用实际的变量开关(ErrorType),编译器不知道将传入什么,因此大小写和默认值都可能是可以访问的。

正如其他人指出的那样,删除引号是因为您想打开变量 ErrorType 包含的字符串。

字符串

文字"ErrorType"永远不能等于"Database Connection"所以编译器只是告诉你。

您可能希望改用 ErrorType 变量:

switch (ErrorType)
{
    case "Database Connection":
        Email.Subject = "JobSight Error, unable to connect to database.";
        Email.Body = "JobSight is unable to connect to the JobSight database, this could indicate the databse is dow nor there is a server problem. Please investigate.";
        break;
    default:
        Email.Subject = "JobSight has encountered an unknown error.";
        Email.Body = "JobSight has encountered an unknown error and thinks that IT should fix it. Good Luck.";
        break;
}

现在,如果 ErrorType 变量等于 "Database Connection"则将执行第一条语句,否则将执行默认语句。此评估将在运行时完成,具体取决于字符串变量的值。