/ / Prima riga di codice nel caso sia contrassegnata come irraggiungibile, ma la seconda linea non lo è, perché? [chiuso] - c #, asp.net-mvc-5, istruzione switch

Prima riga di codice nel caso sia contrassegnata come irraggiungibile, ma la seconda linea non lo è, perché? [chiuso] - c #, asp.net-mvc-5, istruzione switch

Secondo Visual Studio 2015 la prima riga di codice nel primo case la dichiarazione è irraggiungibile ma non capisco perché la seconda riga di codice nella stessa case la dichiarazione non è contrassegnata come irraggiungibile e tutto il codice in default la dichiarazione è raggiungibile. VS è semplicemente stupido o mi manca qualcosa qui?

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);
}

risposte:

4 per risposta № 1

In risposta alla tua domanda reale. Stai accendendo una stringa letterale "ErrorType" e le tue opzioni sono "Connessione DataBase" o Qualsiasi altra cosa.

Dato che il compilatore sta esaminando una stringa letterale, sa che DataBase Connection non sarà mai il caso, quindi è irraggiungibile.

Se ad esempio hai cambiato il tuo passaggio su"DataBase Connection" noteresti che la prima riga sarebbe ok, ma in questo caso l'errore verrebbe visualizzato perché il compilatore sa che Database Connection è l'unica cosa che può essere raggiunta.

Con l'uso dell'interruttore della variabile attuale (ErrorType) il compilatore non sa cosa verrà passato e quindi sia il caso che l'impostazione predefinita sono probabilmente raggiungibili.

Come indicato da altri, rimuovere le virgolette perché si desidera attivare la stringa che contiene la variabile ErrorType.


4 per risposta № 2

La stringa letterale "ErrorType" non può mai essere uguale a "Database Connection" quindi il compilatore te lo sta solo dicendo.

Potresti voler usare il ErrorType variabile invece:

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;
}

Ora se il ErrorType variabile uguale a "Database Connection" quindi verrà eseguita la prima istruzione, altrimenti quella predefinita. E questa valutazione verrà eseguita in fase di esecuzione in base al valore della variabile stringa.