C# 如何在调用NormalizeWhitespace方法时防止Lambda block语句中出现新行

C# 如何在调用NormalizeWhitespace方法时防止Lambda block语句中出现新行,c#,roslyn,C#,Roslyn,我有下面的代码 var tree = CSharpSyntaxTree.ParseText( @" Func<string, string> parser = value => { return string.Format(""Hello {0}"", value); }; "); var root = (CompilationUnitSyntax)tree.GetRoot(); var result = root.Norm

我有下面的代码

var tree  = CSharpSyntaxTree.ParseText(
 @"
     Func<string, string> parser = value =>
     {
         return string.Format(""Hello {0}"", value);
     };
");

var root = (CompilationUnitSyntax)tree.GetRoot();
var result = root.NormalizeWhitespace().GetText().ToString();
var-tree=CSharpSyntaxTree.ParseText(
@"
Func parser=value=>
{
返回string.Format(“Hello{0}”,值);
};
");
var root=(CompilationUnitSyntax)tree.GetRoot();
var result=root.NormalizeWhitespace().GetText().ToString();

在打印输出时,NormalizeWhitespace方法将分号推送到新行。我们有没有办法阻止这一切

此外,是否可以将分号移近大括号


感谢您的帮助。

因为字符串文字总是捕获换行符。因此,尝试在字符串结束时结束字符串文字,而不是添加换行符以使括号看起来更漂亮

var tree  = CSharpSyntaxTree.ParseText(
// The trailing newline might help keep indentation on the first line correct
@"
     Func<string, string> parser = value =>
     {
         return string.Format(""Hello {0}"", value);
     };" // Not this string ends here
);

var root = (CompilationUnitSyntax)tree.GetRoot();
var result = root.NormalizeWhitespace().GetText().ToString();

但是为什么它会在换行后移动分号呢?确实如此。OPs字符串以分号结尾,然后换行。输出的最终文本以两个换行符和一个分号结尾(可能还有另一个换行符,尽管很难说)。我无法测试代码,但如果这是一个有效的解决方案,那么我会感到惊讶……我发现,在Normalize方法中,我们可以像NormalizeWhitespace(“,true”)一样修剪换行符。它现在可以正常工作了。@Deepu,你能更详细地描述一下你的解决方案吗?我也有同样的问题。Thanks@DGreen基于我的expamle root.NormalizeWhitespace(“,true).GetText().ToString()尝试此操作;
var tree  = CSharpSyntaxTree.ParseText(
(@"
     Func<string, string> parser = value =>
     {
         return string.Format(""Hello {0}"", value);
     };
").Trim());    // This could also be .Trim('\n') to only remove the newlines before and after the text

var root = (CompilationUnitSyntax)tree.GetRoot();
var result = root.NormalizeWhitespace().GetText().ToString();