roslyn 试图建立一个参数属性
roslyn trying to build a param attribute
我不知道要使用的正确类型是什么。
我正在尝试根据提供的参数语法为文档构建一个 <param name="testing"></param>
元素。
我使用了错误的类型,因为我无法编译。
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")));
}
您的 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();
}
我不知道要使用的正确类型是什么。
我正在尝试根据提供的参数语法为文档构建一个 <param name="testing"></param>
元素。
我使用了错误的类型,因为我无法编译。
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")));
}
您的 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();
}