Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
roslyn如何添加#定义VAR";在C#文档之上_C#_Edit_Document_Roslyn - Fatal编程技术网

roslyn如何添加#定义VAR";在C#文档之上

roslyn如何添加#定义VAR";在C#文档之上,c#,edit,document,roslyn,C#,Edit,Document,Roslyn,我想使用roslyn编辑一个C文档,在上面添加一个“定义琐事” 例如,假设我有以下内容 namespace MyNameSpace { <classes> } 名称空间MyNameSpace{ } 我想去 #define X namespace MyNameSpace { <classes> } #定义X 名称空间MyNameSpace{ } 我尝试了以下方法: DocumentEditor editor = <get document editor&g

我想使用roslyn编辑一个C文档,在上面添加一个“定义琐事”

例如,假设我有以下内容

namespace MyNameSpace {
 <classes>
}
名称空间MyNameSpace{
}
我想去

#define X
namespace MyNameSpace {
 <classes>
}
#定义X
名称空间MyNameSpace{
}
我尝试了以下方法:

DocumentEditor editor = <get document editor>
var compilationUnit = SyntaxFactory.ParseCompilationUnit("#defin X");
                var defineXTrivia = compilationUnit.GetFirstDirective();
                editor.InsertBefore(editor.OriginalRoot, defineXTrivia);
DocumentEditor=
var compilationUnit=SyntaxFactory.ParseCompilationUnit(“#定义X”);
var defineXTrivia=compilationUnit.GetFirstDirective();
editor.InsertBefore(editor.OriginalRoot,defineXTrivia);

我终于明白了:

// Create '#define X' trivia
var defineXDirective = SyntaxFactory.Trivia(SyntaxFactory.DefineDirectiveTrivia("X", isActive : true).NormalizeWhitespace());

// Insert '#define X' trivia on top of the document
var changedRoot = editor.OriginalRoot.WithLeadingTrivia(
                    editor.OriginalRoot.GetLeadingTrivia().InsertRange(0, defineXDirective));
editor.ReplaceNode(editor.OriginalRoot, changedRoot);

转到此处键入
#定义VAR
并按下大按钮。这应该会对您有所帮助。您尝试的代码是如何失败的?当我调用l editor.GetChangedDocument()时,它抛出InvalidOperationException:指定的项不是列表的元素。虽然这样做很有效,但创建defineXDirective不是很容易吗?var defineXDirective=SyntaxFactory.Trivia(SyntaxFactory.DefineDirectiveTrivia(“X”,isActive:true).NormalizeWhitespace());事实上,我同意这是相当好的。