Voici un exemple de ce que je veux faire:
MessageBox.Show("Error line number " + CurrentLineNumber);
Dans le code au-dessus de CurrentLineNumber
, devrait être le numéro de ligne dans le code source de ce morceau de code.
Comment puis je faire ça?
c#
wpf
c#-4.0
line-numbers
MonstreMMORPG
la source
la source
Réponses:
Dans .NET 4.5 / C # 5, vous pouvez demander au compilateur de faire ce travail pour vous, en écrivant une méthode utilitaire qui utilise les nouveaux attributs de l'appelant:
Cela affichera, par exemple:
Il y a aussi
[CallerFilePath]
qui vous indique le chemin du fichier de code d'origine.la source
Utilisez la méthode StackFrame.GetFileLineNumber , par exemple:
Voir l'entrée du blog de Scott Hanselman pour plus d'informations.
[Modifier: a ajouté ce qui suit]
Pour ceux qui utilisent .Net 4.5 ou version ultérieure, considérez les attributs CallerFilePath , CallerMethodName et CallerLineNumber dans l'espace de noms System.Runtime.CompilerServices. Par exemple:
Les arguments doivent être
string
pourCallerMemberName
etCallerFilePath
et unint
pourCallerLineNumber
et doivent avoir une valeur par défaut. La spécification de ces attributs sur les paramètres de méthode indique au compilateur d'insérer la valeur appropriée dans le code appelant au moment de la compilation, ce qui signifie qu'il fonctionne par obfuscation. Voir Informations sur l'appelant pour plus d'informations.la source
StackFrame
exemple sur Mono , assurez-vous de l' utiliser--debug
au moment de la compilation et au moment de l'exécutionStackFrame
n'est pas disponible dans .NET Core. Utilisez la réponse de Marc Gravell.= string.Empty
génère l'erreur "La valeur du paramètre par défaut pour 'callingFilePath' doit être une constante de compilation" !""
) au lieu destring.Empty
.Je préfère une doublure donc:
la source
Pour ceux qui ont besoin d'une solution de méthode .NET 4.0+:
Comment appeler:
Production:
Changez le format Console.WriteLine comme vous le souhaitez!
la source
System.Diagnostics.Debug.WriteLine(String.Format("{0}({1}): {2}: {3}", fileName, lineNumber, methodName, message));
vous pouvez cliquer sur la ligne dans la fenêtre de sortie et être redirigé vers cette ligne dans la source.Si c'est dans un bloc try catch, utilisez ceci.
la source
Dans .NET 4.5, vous pouvez obtenir le numéro de ligne en créant la fonction:
Ensuite, chaque fois que vous appelez,
LineNumber()
vous aurez la ligne actuelle. Cela présente l'avantage par rapport à toute solution utilisant StackTrace de fonctionner à la fois dans le débogage et la version.Donc, en prenant la demande initiale de ce qui est requis, cela deviendrait:
Cela s'appuie sur l'excellente réponse de Marc Gravell.
la source