如何将EndOfFile和DataRange变量赋值为其所在行号?
嘿Scott,我来帮你搞定把EndOfFile和DataRange设为它们所在行号的问题~不同编程语言的实现方式略有不同,我给你整理了几种常见语言的解决方案:
Python 实现方案
Python可以借助inspect模块来动态获取当前代码行的行号,写个简单的辅助函数就能轻松实现:
import inspect def get_current_line(): # 获取调用该函数的代码行号 return inspect.currentframe().f_back.f_lineno # 这行的行号会被赋值给EndOfFile EndOfFile = get_current_line() # 这行的行号会被赋值给DataRange DataRange = get_current_line()
原理说明:inspect.currentframe()获取当前函数的栈帧,f_back跳转到调用这个函数的上层栈帧,再通过f_lineno拿到对应的行号,这样变量赋值时调用函数,就能直接获取所在行的行号啦。
C# 实现方案
C#里可以利用System.Diagnostics.StackFrame类来获取行号,不需要额外写辅助函数,直接一行搞定:
using System.Diagnostics; // 直接获取当前行的行号赋值给EndOfFile int EndOfFile = new StackFrame(0, true).GetFileLineNumber(); // 同理获取DataRange所在行的行号 int DataRange = new StackFrame(0, true).GetFileLineNumber();
原理说明:StackFrame(0, true)表示获取当前执行的栈帧,第二个参数true表示启用文件信息的获取,GetFileLineNumber()就能返回当前代码行的行号。
Java 实现方案
Java可以通过Throwable的堆栈跟踪来获取行号,写法也很简洁:
public class LineNumberDemo { public static void main(String[] args) { // 获取当前行号赋值给EndOfFile int EndOfFile = new Throwable().getStackTrace()[0].getLineNumber(); // 获取当前行号赋值给DataRange int DataRange = new Throwable().getStackTrace()[0].getLineNumber(); } }
原理说明:new Throwable().getStackTrace()会返回当前的堆栈跟踪数组,第一个元素(索引0)就是当前执行的代码帧,调用getLineNumber()就能拿到对应的行号。
小提醒
这些方法都是运行时动态获取行号,如果后续代码行发生增减,行号会自动更新,不需要手动修改。如果只是需要固定的行号,直接写数字赋值就好啦~
内容的提问来源于stack exchange,提问作者Scott
相关产品推荐
相关产品推荐

