简体   繁体   中英

roslyn trying to build a param attribute

I cannot figure out what the correct types to use are.

I am trying to build a <param name="testing"></param> element for documentation from the supplied parameter syntax.

I am using the wrong types as I cannot compile.

Error CS0029 Cannot implicitly convert type 'Microsoft.CodeAnalysis.CSharp.Syntax.XmlTextAttributeSyntax' to 'Microsoft.CodeAnalysis.CSharp.Syntax.XmlNodeSyntax'`

/// <summary>
/// Create a parameter element for the supplied parameter syntax.
/// </summary>
/// <param name="parameterSyntax">the parameter syntax.</param>
/// <returns>the corresponding parameter XML entry.</returns>
private XmlElementSyntax CreateParameter(ParameterSyntax parameterSyntax)
{
    var identifier = SyntaxFactory.Identifier(parameterSyntax.Identifier.Text);
    var text = SyntaxFactory.XmlTextAttribute(
        SyntaxFactory.XmlName("name"),
        SyntaxFactory.Token(SyntaxKind.EqualsToken),
        SyntaxFactory.Token(SyntaxKind.DoubleQuoteToken),
        SyntaxFactory.TokenList(identifier),
        SyntaxFactory.Token(SyntaxKind.DoubleQuoteToken));

    // THE PROBLEM IS HERE
    var list = SyntaxFactory.List<XmlNodeSyntax>(new XmlNodeSyntax[] { text });

    return SyntaxFactory.XmlElement(
        SyntaxFactory.XmlElementStartTag(SyntaxFactory.XmlName("param")),
        list,
        SyntaxFactory.XmlElementEndTag(SyntaxFactory.XmlName("param")));
}

Your xml attribute should be part of your XmlElementStartTag , not of the element content. Try something like this:

private XmlElementSyntax CreateParameter(ParameterSyntax parameterSyntax)
{
  var identifier = SyntaxFactory.Identifier(parameterSyntax.Identifier.Text);

  var attribute = SyntaxFactory.XmlNameAttribute(
      SyntaxFactory.XmlName("name"),
      SyntaxFactory.Token(SyntaxKind.DoubleQuoteToken),
      SyntaxFactory.IdentifierName(identifier),
      SyntaxFactory.Token(SyntaxKind.DoubleQuoteToken));

  var startTag = SyntaxFactory.XmlElementStartTag(SyntaxFactory.XmlName("param"))
    .WithAttributes(new SyntaxList<XmlAttributeSyntax>().Add(attribute));

  var endTag = SyntaxFactory.XmlElementEndTag(SyntaxFactory.XmlName("param"));

  return SyntaxFactory.XmlElement(startTag, new SyntaxList<XmlNodeSyntax>(), endTag)
                      .NormalizeWhitespace();
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM