Comment puis-je corriger l’erreur: «Code inaccessible détecté»

public partial class KalenderLeeftijd : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void calBirthDate_SelectionChanged(object sender, EventArgs e) { } private ssortingng GetAnswer() { DateTime birthday = calBirthDate.SelectedDate; TimeSpan difference = DateTime.Now.Date - birthday; int leapYears = CountLeapYears(birthday); int days = (int)difference.TotalDays - leapYears; int hours = (int)difference.TotalHours - leapYears * 24; int years = days / 365; Ssortingng answer = Ssortingng.Format("Age: {0} years", years); answer += Environment.NewLine; answer += Ssortingng.Format("Days: {0}*365+{1} = {2}", years, days - years * 365, days); answer += Environment.NewLine; answer += Ssortingng.Format("Days Hours: {0}*24 = {1}", hours / 24, hours); return answer; } private int CountLeapYears(DateTime startDate) { int count = 0; for (int year = startDate.Year; year = startDate && february29 <= DateTime.Now.Date) { count++; } } } return count; String answer = GetAnswer(); Response.Write(lblAntwoord); } } 

Pourquoi ai-je le message d’erreur suivant: “Code inaccessible détecté”? – L’erreur est indiquée à la ligne suivante – Ssortingng answer = GetAnswer();

C’est simplement parce que votre code vient après la déclaration de retour.

L’instruction return termine l’exécution de la méthode dans laquelle elle apparaît et renvoie le contrôle à la méthode appelante. Il peut également renvoyer une valeur optionnelle. Si la méthode est un type vide, l’instruction return peut être omise.

Si l’instruction return est à l’intérieur d’un bloc try, le bloc finally, s’il en existe un, sera exécuté avant que le contrôle ne retourne à la méthode d’appel.

http://msdn.microsoft.com/en-us/library/1h3swy84%28v=vs.100%29.aspx

solution (évidente):

déplacez le code inaccessible avant l’instruction de retour.

Le code inaccessible est un avertissement du compilateur, pas une erreur. Vous avez trois options:

  • Supprimez le code inaccessible.
  • Arrêtez de traiter les avertissements comme des erreurs dans les propriétés du projet.
  • Déplacez l’instruction de retour en dessous de ce qui est actuellement inaccessible.

Il est inaccessible car le stream de la méthode se termine à l’instruction return et n’exécutera donc jamais le code ci-dessous. Le compilateur peut déterminer cela et peut donc le signaler. Comme je l’ai dit, ce sont en fait des avertissements du compilateur qui n’arrêteront pas une construction réussie si vous n’avez pas configuré le projet pour traiter les avertissements comme des erreurs.

  return count; // here you exit this method Ssortingng answer = GetAnswer(); // so you'll never get here Response.Write(lblAntwoord); 

Le compilateur vous avertit correctement que ces dernières lignes ne seront jamais exécutées.

Lorsque vous déplacez simplement le retour en bas de 2 lignes:

  Ssortingng answer = GetAnswer(); Response.Write(lblAntwoord); return count; 

L’erreur de compilation disparaîtra et votre programme se bloquera . C’est à vous de comprendre pourquoi ces 2 méthodes ne devraient pas s’appeler.

La déclaration:

 return count; 

Quitte la fonction. Donc,

 answer = GetAnswer(); Response.Write(lblAntwoord); 

ne peut pas être atteint.

L’instruction return met fin à l’exécution d’une fonction et rend le contrôle à la fonction appelante. L’exécution reprend dans la fonction appelante au point qui suit immédiatement l’appel

Si aucune instruction de retour n’apparaît dans une définition de fonction, le contrôle revient automatiquement à la fonction appelante après l’exécution de la dernière instruction de la fonction appelée.

Dans votre code:

 private int CountLeapYears(DateTime startDate) { int count = 0; for (int year = startDate.Year; year <= DateTime.Now.Year; year++) { if (DateTime.IsLeapYear(year)) { DateTime february29 = new DateTime(year, 2, 29); if (february29 >= startDate && february29 <= DateTime.Now.Date) { count++; } } } return count;//The Execution will be terminated here,the next lines will become unreachable **String** answer = GetAnswer(); Response.Write(lblAntwoord); } } 

LIEN MSDN:

C: https://msdn.microsoft.com/en-us/library/sta56yeb.aspx

c #: https://msdn.microsoft.com/en-us/library/1h3swy84.aspx