Hier ist ein Beispiel dafür, was ich tun möchte:
MessageBox.Show("Error line number " + CurrentLineNumber);
Im obigen Code wird die CurrentLineNumber
sollte die Zeilennummer im Quellcode dieses Teils des Codes sein.
Wie kann ich das tun?
Hier ist ein Beispiel dafür, was ich tun möchte:
MessageBox.Show("Error line number " + CurrentLineNumber);
Im obigen Code wird die CurrentLineNumber
sollte die Zeilennummer im Quellcode dieses Teils des Codes sein.
Wie kann ich das tun?
Sie haben nur nach der Zeilennummer gefragt und mit nullable project type, müssen Sie dann etwas wie dieses verwenden
internal class Utils
{
public static int Line([CallerLineNumber] int? lineNumber =null)=>lineNumber;
}
in Ihrem Code, wenn Sie eine Zeilennummer erhalten möchten, rufen Sie einfach
var line=Utils.Line();
Wenn Sie protokollieren und die Zeilennummer in der Protokollierung dokumentieren möchten, rufen Sie die Methode wie folgt auf
public void MyMethod(int someValue)
{
switch(someValue)
{
case 1:
if(abc<xyz)
{
logger.LogInformation("case value {someValue} this line {line} was true", someValue ,Utils.Line()-2);
}
break;
case 2:
logger.LogInformation("case value {someValue} this {line} was executed",someValue,Utils.Line());
break;
caste 3:
logger.LogInformation("case value {someValue} this {line} was executed",someValue,Utils.Line());
break;
}
}
Sie können dieses Muster mit jeder der anderen [CallerXXX]-Methoden erweitern und sie nicht nur in den Methodenparametern, sondern auch an anderen Stellen verwenden.
im Nuget-Paket Walter Ich verwende eine super coole Klasse namens ExceptionObject
Wenn Sie das NuGet-Paket importieren, haben Sie einige schöne Erweiterungsmethoden für die Klasse Exception sowie Zugriff auf einen CallStack, der die Aufrufkette einschließlich der Methodenparameter und Parameterwerte aller aufgerufenen Methoden anzeigt.
Es ist wie ein Stapel einer Ausnahme, nur mit Werten, die zeigen, wie Sie mit welchen Werten dorthin gekommen sind.
public void MyMethod()
{
try
{
//get me all methods, signatures, parameters line numbers file names etc used as well as assembly info of all assemblies used for documentation of how the code got here
var stack= new CallStack();
foreach( var frame in StackedFrames)
{
logger.LogDebug(frame.ToString());
}
}
catch(SqlException e)
{
var ex = new ExceptionObject(e);
logger.LogException(e,"{this} exception due to {message} {server} {procedure} TSQL-line:{sqlline}\n{TSQL}"
,e.GetType().Name
,e.Message
,ex.SqlServer
,ex.SqlProcedureName
,ex.SqlLineNumber
,ex.Tsql
,ex.CallStack);
}
catch(Exception e)
{
var ex = new ExceptionObject(e);
logger.LogException(e,"{this} exception due to {message} signature: signature}\nCallStack:", e.GetType().Name,e.Message,ex.Signature,ex.CallStack);
}
}
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.