2017-06-06 10 views
0

LocalDeclarationをグローバルリソースに変換する関数を記述しました。今、私は、プロパティとそれぞれの定義に置き換えんだけど、私は新しい構文を使用して、プロパティとそれを交換したい=>Roslyn(ラムダ)エクスプレッションBodiedプロパティの構文

public PropertyDeclarationSyntax ConvertToResourceProperty(string resouceClassIdentifier, string fieldName, string resourceKey, CSharpSyntaxNode field) 
    { 
     var stringType = SyntaxFactory.ParseTypeName("string"); 

     var resourceReturnIdentifier = SyntaxFactory.IdentifierName(resouceClassIdentifier + "." + resourceKey); 
     var returnResourceStatement = SyntaxFactory.ReturnStatement(resourceReturnIdentifier).NormalizeWhitespace(); 
     var getRescourceBlock = SyntaxFactory.Block(returnResourceStatement); 

     var getAccessor = SyntaxFactory.AccessorDeclaration(SyntaxKind.GetAccessorDeclaration, getRescourceBlock).WithAdditionalAnnotations(Formatter.Annotation, Simplifier.Annotation); 

     var propertyDeclaration = SyntaxFactory.PropertyDeclaration(stringType, fieldName).AddModifiers(SyntaxFactory.Token(SyntaxKind.PublicKeyword), SyntaxFactory.Token(SyntaxKind.StaticKeyword)).NormalizeWhitespace(); 

     propertyDeclaration = propertyDeclaration.AddAccessorListAccessors(getAccessor).WithAdditionalAnnotations(Formatter.Annotation); 

     SyntaxTrivia[] leadingTrivia = field.GetLeadingTrivia().ToArray() ?? new[] { SyntaxFactory.Whitespace("\t") }; 
     return propertyDeclaration.WithTrailingTrivia(SyntaxFactory.Whitespace("\r\n")) 
        .WithLeadingTrivia(leadingTrivia) 
        .WithAdditionalAnnotations(Simplifier.Annotation); 
    } 

このコードはそうのようなプロパティを作成:

public static LocalResourceName 
{ 
    get{ return Resources.LocalResourceName; } 
} 

public static LocalResourceName =>Resources.LocalResourceName; 

syntaxfactoryから式のボディプロパティを作成するにはどうしたらいいですか?誰かが私に正しい方法を教えてもらえますか?

答えて

0

インターネットを精査した後、私はそれを行う方法を見つけました。なぜローズリンについての文書はありませんか?ここで

public PropertyDeclarationSyntax ConvertToResourceProperty(string resouceClassIdentifier, string fieldName, string resourceKey, CSharpSyntaxNode field) 
{ 
    var stringType = SyntaxFactory.ParseTypeName("string"); 

    var resourceClassName = SyntaxFactory.IdentifierName(resouceClassIdentifier); 
    var resourceKeyName = SyntaxFactory.IdentifierName(resourceKey); 
    var memberaccess = SyntaxFactory.MemberAccessExpression(SyntaxKind.SimpleMemberAccessExpression, resourceClassName, resourceKeyName); 

    var propertyLambda = SyntaxFactory.ArrowExpressionClause(memberaccess); 

    var propertyDeclaration = SyntaxFactory.PropertyDeclaration(new SyntaxList<AttributeListSyntax>(), new SyntaxTokenList(), 
                   stringType, null, SyntaxFactory.Identifier(fieldName), null, 
                   propertyLambda, null, SyntaxFactory.Token(SyntaxKind.SemicolonToken)) 
                     .AddModifiers(SyntaxFactory.Token(SyntaxKind.PublicKeyword), 
                    SyntaxFactory.Token(SyntaxKind.StaticKeyword)).WithAdditionalAnnotations(Formatter.Annotation).NormalizeWhitespace(); 

    return propertyDeclaration.WithTrailingTrivia(SyntaxFactory.ElasticCarriageReturnLineFeed) 
       .WithLeadingTrivia(field.GetLeadingTrivia().ToArray()) 
       .WithAdditionalAnnotations(Simplifier.Annotation); 
} 
+3

は、これらを生成する方法を考え出すための便利なリソースです:イミディエイトウィンドウを使用して、そのリソースのhttps://roslynquoter.azurewebsites.net/ – JoshVarty

+0

@JoshVartyおかげでとても迷惑でした –

関連する問題