gpt4 book ai didi

c# - 以编程方式在方法体结束前插入代码行

转载 作者:太空狗 更新时间:2023-10-30 01:34:35 25 4
gpt4 key购买 nike

我想做的是以编程方式插入一行代码(C#,意思是打开一个现有文件并写入它)(见下文):

我有 MyClass.cs:

public class MyClass
{
public void HelloWorld()
{
//hello world
switch(somevalue)
{
case derp:
//do something here
break;
}
<--------INSERT CODE HERE -------->
}
}

执行此操作的最佳方法是什么?我怎样才能找到方法“HelloWorld”,然后找到“匹配的”右括号 (})?

很多人可能想知道我为什么要这个(因为它看起来有点愚蠢)。我想要这个是因为我在为 Windows 应用商店应用程序构建时正在为 Unity 编写一个 PostProcess 脚本。有些东西需要在每次新构建后手动添加(我想自动添加,以尽量减少可能出错/忘记的东西的数量)。

编辑

显然我还不够清楚。上面的代码只是一个示例的意思,它看起来不会和上面的代码示例完全一样。可能有也可能没有开关盒。可能会有额外的 {} 字符(尽管始终会有匹配的开始和结束括号)。没有“占位符”,这意味着没有我可以找到并替换的“<--------INSERT CODE HERE -------->”。如果事情有那么简单,我就不会寻求帮助了!抱歉,如果我不清楚,但老实说,我认为我提供了足够的信息。

最佳答案

给定一些限制:

  1. 该类不包含带左/右大括号的字符串文字。
  2. 您需要插入该行的方法始终位于大括号嵌套的第 2 层。
  3. 您需要在所有此类方法中插入该行。
  4. 也许还有一些其他限制条件?

你可以像我刚才用 JavaScript 写的那样写一个简单的程序:

var str = '{test{test2{test3}{test4}}{test5}}';

var stack = [];

var result = '';
for (var i = 0, len = str.length; i < len; i++) {
var chr = str[i];
var resChr = chr;
if(chr == '{') {
stack.push(chr);
}
if (chr == '}') {
stack.pop();

if (stack.length == 1) {
resChr = 'your line;' + chr;
}
}

result += resChr;
}

console.log(result);

JsFiddle https://jsfiddle.net/dus2jj63/

结果会是

{test{test2{test3}{test4}your line;}{test5your line;}}

代码可能看起来很丑,你可以在这里做很多优化。如果您需要查找具有特定名称的方法,您还可以添加简单的调整。

附言首先尝试用正则表达式解决它,但结果并不是那么容易。

附言另一个带有您提供的示例的 JsFiddle https://jsfiddle.net/xhezcg7a/

关于c# - 以编程方式在方法体结束前插入代码行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30108792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com