Roslyn Object Initialization новое ключевое слово - PullRequest
0 голосов
/ 17 декабря 2018

Я пытаюсь написать метод, который будет создавать экземпляр объекта, являющегося свойством

Я придумал что-то вроде этих строк:

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)))
                                                                                                                                    )));
}

Но это генерирует следующееcode:

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

            ;

Есть небольшая проблема с этим ... Но по-мужски тот факт, что новое ключевое слово пропускает пробел после, хотя я добавил мелочи?Я бы хотел, чтобы он генерировал что-то вроде этого:

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

Я не знаю, чего мне не хватает ... Я поместил код, который он должен сгенерировать, в Roslyn Quoter И это дало мне что-то вроде первой ссылки!Также я попытался использовать метод NormalizeWhiteSpace () в LocalDeclarationStatement, но он форматирует инициализацию объекта следующим образом:

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

1 Ответ

0 голосов
/ 17 декабря 2018

Попробуйте использовать WithLeadingTrivia вместо WithTrailingTrivia (конечно, если есть такой метод).

Я полагаю, вы просто добавляете пробел после имени типа (но не после ключевого слова new)

...