2015-11-20 2 views
0

Я не могу понять, какие правильные типы использовать.roslyn пытается создать атрибут param

Я пытаюсь создать элемент <param name="testing"></param> для документации из прилагаемого синтаксиса параметров.

Я использую неправильные типы, поскольку я не могу скомпилировать.

CS0029 Ошибка Не удается неявно преобразовать тип 'Microsoft.CodeAnalysis.CSharp.Syntax.XmlTextAttributeSyntax' до «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"))); 
} 

ответ

1

Ваш атрибут XML должен быть часть вашего XmlElementStartTag, а не содержимого элемента. Попробуйте что-то вроде этого:

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(); 
} 
Смежные вопросы