Roslyn对象初始化新关键字

时间:2018-12-17 20:29:01

标签: c# syntax format new-operator roslyn

我正在尝试编写一种方法,该方法将实例化给定为property的对象

我想出了一些类似的话:

public static LocalDeclarationStatementSyntax GetVariableWithDeclarationWithInitialization(string pVariableType, string pVariableName, InitializerExpressionSyntax pInitializer)
{
       return SyntaxFactory.LocalDeclarationStatement(SyntaxFactory.VariableDeclaration(SyntaxFactory.IdentifierName(pVariableType)).WithTrailingTrivia(SyntaxFactory.Space)
                                                                   .WithVariables(SyntaxFactory.SingletonSeparatedList(SyntaxFactory.VariableDeclarator(SyntaxFactory.Identifier(pVariableName))
                                                                                                                                    .WithInitializer(SyntaxFactory.EqualsValueClause(SyntaxFactory.ObjectCreationExpression(SyntaxFactory.IdentifierName(pVariableType)
                                                                                                                                                                                                  .WithInitializer(pInitializer)))
                                                                                                                                    )));
}

但这会生成以下代码:

            ObjectTest test = newObjectTest 
            {
                prop1 = random.Next(0, 2) == 0 , 
                prop2 = Guid.NewGuid().ToString() , 
                prop3 = random.Next(0, 100)}

            ;

这有一些问题... 但是,男子气概的事实是,即使我添加了一个琐事,new关键字也会缺少一个空格? 我希望它生成如下内容:

           ObjectTest test = new ObjectTest 
           {
                prop1 = random.Next(0, 2) == 0, 
                prop2 = Guid.NewGuid().ToString(), 
                prop3 = random.Next(0, 100)
           };

我不知道我想念的是什么...我把它应该生成的代码放在 Roslyn Quoter 它给了我一些类似于第一个链接的东西! 我也尝试过在LocalDeclarationStatement上使用NormalizeWhiteSpace()方法,但是它像这样格式化对象Initalization:

           ObjectTest test = new ObjectTest{
               prop1 = random.Next(0, 2) == 0, prop2 = Guid.NewGuid().ToString(), prop3 = random.Next(0, 100)};

1 个答案:

答案 0 :(得分:0)

尝试使用WithLeadingTrivia代替WithTrailingTrivia(当然,如果有这种方法的话)。

我想您只是在Type名称之后添加了一个空格(而不是new关键字之后)