Aquí hay un ejemplo de lo que quiero hacer:
MessageBox.Show("Error line number " + CurrentLineNumber);
En el código de arriba CurrentLineNumber
, debería estar el número de línea en el código fuente de este fragmento de código.
¿Cómo puedo hacer eso?
c#
wpf
c#-4.0
line-numbers
MonstruoMMORPG
fuente
fuente
Respuestas:
En .NET 4.5 / C # 5, puede hacer que el compilador haga este trabajo por usted escribiendo un método de utilidad que use los nuevos atributos de llamada:
Esto mostrará, por ejemplo:
También hay una
[CallerFilePath]
que le indica la ruta del archivo de código original.fuente
Utilice el método StackFrame.GetFileLineNumber , por ejemplo:
Consulte la entrada del blog de Scott Hanselman para obtener más información.
[Editar: se agregó lo siguiente]
Para aquellos que usan .Net 4.5 o posterior, considere los atributos CallerFilePath , CallerMethodName y CallerLineNumber en el espacio de nombres System.Runtime.CompilerServices. Por ejemplo:
Los argumentos deben ser
string
paraCallerMemberName
yCallerFilePath
yint
paraCallerLineNumber
y deben tener un valor predeterminado. La especificación de estos atributos en los parámetros del método indica al compilador que inserte el valor apropiado en el código de llamada en el momento de la compilación, lo que significa que funciona mediante la ofuscación. Consulte Información de la persona que llama para obtener más información.fuente
StackFrame
ejemplo en Mono , asegúrese de usarlo--debug
en tiempo de compilación y en tiempo de ejecuciónStackFrame
no está disponible en .NET Core. Utilice la respuesta de Marc Gravell.= string.Empty
arroja el error "El valor del parámetro predeterminado para 'callingFilePath' debe ser una constante en tiempo de compilación" .""
) en lugar destring.Empty
.Prefiero una línea, así que:
fuente
Para aquellos que necesitan una solución de método .NET 4.0+:
Como llamar:
Salida:
¡Cambie el formato Console.WriteLine como desee!
fuente
System.Diagnostics.Debug.WriteLine(String.Format("{0}({1}): {2}: {3}", fileName, lineNumber, methodName, message));
entonces puede hacer clic en la línea en la ventana de salida y ser llevado a esa línea en la fuente.Si está en un bloque de captura de prueba, usa esto.
fuente
En .NET 4.5 puede obtener el número de línea creando la función:
Luego, cada vez que llame
LineNumber()
, tendrá la línea actual. Esto tiene la ventaja sobre cualquier solución que utilice StackTrace de que debería funcionar tanto en depuración como en versión.Entonces, tomando la solicitud original de lo que se requiere, se convertiría en:
Esto se basa en la excelente respuesta de Marc Gravell.
fuente