현재 라인 번호는 어떻게 얻습니까?
다음은 내가 원하는 작업의 예입니다.
MessageBox.Show("Error line number "+CurrentLineNumber);
현재 줄 번호는이 코드 조각의 소스 코드에있는 줄 번호입니다.
어떻게 할 수 있습니까?
.NET 4.5 / C # 5에서는 새 호출자 속성을 사용하는 유틸리티 메서드를 작성하여 컴파일러가이 작업을 수행하도록 할 수 있습니다.
static void SomeMethodSomewhere()
{
ShowMessage("Boo");
}
...
static void ShowMessage(string message,
[CallerLineNumber] int lineNumber = 0,
[CallerMemberName] string caller = null)
{
MessageBox.Show(message + " at line " + lineNumber + " (" + caller + ")");
}
예를 들어 다음과 같이 표시됩니다.
39 번 줄의 Boo (SomeMethodSomewhere)
[CallerFilePath]
원본 코드 파일의 경로를 알려주는 것도 있습니다.
예를 들어 StackFrame.GetFileLineNumber 메서드를 사용합니다 .
private static void ReportError(string message)
{
StackFrame callStack = new StackFrame(1, true);
MessageBox.Show("Error: " + message + ", File: " + callStack.GetFileName()
+ ", Line: " + callStack.GetFileLineNumber());
}
자세한 내용은 Scott Hanselman의 블로그 항목 을 참조하십시오.
[편집 : 다음 추가]
.Net 4.5 이상을 사용 하는 경우 System.Runtime.CompilerServices 네임 스페이스 의 CallerFilePath , CallerMethodName 및 CallerLineNumber 속성을 고려하십시오 . 예를 들면 :
public void TraceMessage(string message,
[CallerMemberName] string callingMethod = "",
[CallerFilePath] string callingFilePath = "",
[CallerLineNumber] int callingFileLineNumber = 0)
{
// Write out message
}
인수는해야합니다 string
에 대한 CallerMemberName
과 CallerFilePath
와 int
대한 CallerLineNumber
및 기본 값이 있어야합니다. 메서드 매개 변수에 이러한 특성을 지정하면 컴파일 타임에 적절한 값을 호출 코드에 삽입하도록 컴파일러에 지시합니다. 즉, 난독 화를 통해 작동합니다. 자세한 내용은 발신자 정보 를 참조하십시오.
나는 하나의 라이너를 선호하므로 :
int lineNumber = (new System.Diagnostics.StackFrame(0, true)).GetFileLineNumber();
.NET 4.0+ 메서드 솔루션이 필요한 사람들을 위해 :
using System;
using System.IO;
using System.Diagnostics;
public static void Log(string message) {
StackFrame stackFrame = new System.Diagnostics.StackTrace(1).GetFrame(1);
string fileName = stackFrame.GetFileName();
string methodName = stackFrame.GetMethod().ToString();
int lineNumber = stackFrame.GetFileLineNumber();
Console.WriteLine("{0}({1}:{2})\n{3}", methodName, Path.GetFileName(fileName), lineNumber, message);
}
전화 방법 :
void Test() {
Log("Look here!");
}
산출:
Void Test () (FILENAME.cs : 104)
이봐!
원하는 방식으로 Console.WriteLine 형식을 변경하십시오!
try catch 블록에 있으면 이것을 사용하십시오.
try
{
//Do something
}
catch (Exception ex)
{
System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
Console.WriteLine("Line: " + trace.GetFrame(0).GetFileLineNumber());
}
In .NET 4.5 you can get the line number by creating the function:
static int LineNumber([System.Runtime.CompilerServices.CallerLineNumber] int lineNumber = 0)
{
return lineNumber;
}
Then each time you call LineNumber()
you will have the current line. This has the advantage over any solution using the StackTrace that it should work in both debug and release.
So taking the original request of what is required, it would become:
MessageBox.Show("Error enter code here line number " + LineNumber());
This is building on the excellent answer by Marc Gravell.
This works for me:
try
{
//your code;
}
catch(Exception ex)
{
MessageBox.Show(ex.StackTrace + " ---This is your line number, bro' :)", ex.Message);
}
참고URL : https://stackoverflow.com/questions/12556767/how-do-i-get-the-current-line-number
'Programing' 카테고리의 다른 글
포커 봇 물리 치기 (0) | 2020.08.07 |
---|---|
cmd에서 간단한 파일 검색을 수행하는 방법 (0) | 2020.08.07 |
React-Router : 경로를 찾을 수 없습니까? (0) | 2020.08.07 |
입력 값을 캐시 / 보존하지 않도록 브라우저에 알리는 페이지 만들기 (0) | 2020.08.07 |
파일을 찾아 tar (공백 포함) (0) | 2020.08.07 |