コード例 #1
0
        public static string GetBakingFieldName(this PropertyDeclarationSyntax property)
        {
            var get             = property.GetGetAccessor();
            var returns         = get?.Body.DescendantNodes <ReturnStatementSyntax>().FirstOrDefault();
            var fieldIdentifier = returns?.Expression as IdentifierNameSyntax;

            if (fieldIdentifier is not null)
            {
                return(fieldIdentifier.Identifier.ValueText);
            }

            var set      = property.GetSetAccessor();
            var setValue = set?.Body
                           .DescendantNodes <AssignmentExpressionSyntax>()
                           .FirstOrDefault(s => s.OperatorToken.IsKind(SyntaxKind.EqualsToken) &&
                                           s.Right is IdentifierNameSyntax ident && ident.Identifier.ValueText == "value");

            if (setValue is not null && setValue.Left is IdentifierNameSyntax ident)
            {
                return(ident.Identifier.ValueText);
            }

            return(null);
        }