我想做的是以编程方式插入一行代码(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 -------->”。如果事情有那么简单,我就不会寻求帮助了!抱歉,如果我不清楚,但老实说,我认为我提供了足够的信息。
最佳答案
给定一些限制:
- 该类不包含带左/右大括号的字符串文字。
- 您需要插入该行的方法始终位于大括号嵌套的第 2 层。
- 您需要在所有此类方法中插入该行。
- 也许还有一些其他限制条件?
你可以像我刚才用 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/