5

我试图在我的类 XML 文档中包含一个代码片段,但编译器抱怨 xml 元素未关闭!这是我想要实现的目标

/// <summary>
/// Method documentation here...
/// </summary>
/// <remarks>
/// <para>
/// This class should be used as follow:
/// <br/>
/// ************** PROBLEM IN NEXT LINE ********************
/// <c> MyClass class = new MyClass<String>(); </c>
/// </para>
/// </remarks>
public class MyClass<T>{
....
}

我试图将代码片段替换为/// <c> MyClass class = new MyClass{String}(); </c>

有没有人经历过这种情况?

谢谢你的帮助

4

4 回答 4

7

在 xml 文档中,您必须将三角括号替换为大括号:

 /// <summary>
 /// Calls <see cref="DoSomething{T}"/>.
 /// </summary>
 public void CallsDoSomething()
 {

 }

 public void DoSomething<T>()
 {

 }

您最终被迫这样做的原因是,如果您允许元素标记之外的三角括号,它确实不是格式良好的 xml。

您尝试的替换是正确的。

于 2012-02-23T12:18:03.453 回答
5

您没有关闭Remarks第 4 行中的元素,它可能会抱怨这一点,只是在错误的行号处。

此外,对于包含泛型的示例,它List<string>作为文本字面List量,后跟一个未封闭的stringXML 元素。解决这个问题的最简单方法是List &amp;lt;string&amp;gr;在解析时生成List<string>而不是 XML 元素。

C# 编译器团队添加{}作为替代品,所以你可以这样做List{string},它将被处理成 <> 的。

于 2012-02-23T12:19:23.837 回答
3

有几件事:

  1. 通过将它们替换为and来转义你的<and字符。>&lt;&gt;
  2. 关闭您的 XML<remarks>部分</remarks>
  3. 当您决定在标签中引用泛型(即<see ... />,<seealso ... />等)时,您可以这样做:<see cref="SomeMethod{T}(T value)" />. 永远不要在引用中指定具体类型(也就是说,不要这样做<see cref="SomeMethod{String}(String value)" />)。

这是您的 XML 注释的固定版本:

/// <summary>
/// Method documentation here...
/// </summary>
/// <remarks>
/// <note type="implementsinfo">
///     <para>This class should be used as follow:</para>
///     <para><c>MyClass class = new MyClass&lt;string&lt;();</c></para>
/// </note>
/// </remarks>
public class MyClass<T>
{
    ....
}
于 2012-02-23T12:28:08.260 回答
2

<remarks>的永远不会关闭。

还需要像您已经尝试过的那样更换角括号。

于 2012-02-23T12:18:43.347 回答