在C# 9中为记录添加注释

25

我想要在C# 9中为记录属性添加注释的方法。

当我尝试使用以下代码:

public record Person
{
    /// <summary>
    /// Gets the first name.
    /// </summary>
    public string FirstName { get; init; }
    
    /// <summary>
    ///  Gets the last name.
    /// </summary>
    public string LastName { get; init; }
}

我收到了以下警告:

当退出构造函数时,非空属性 'FirstName' 必须包含非空值。考虑将该属性声明为可为空。

当我尝试:

public record Person(string firstName, string lastName);

我得到了这个警告:

'Person.firstName' 的公开可见类型或成员缺少 XML 注释。


这也不起作用。

/// <summary>
/// Person.
/// </summary>
/// <param name="FirstName">Get the first name.</param>
/// <param name="LastName">Get the last name.</param>
public record Person(string FirstName, string LastName);

警告:

XML注释有一个'FirstName'参数标记,但是没有该名称的参数


猜测一下,尝试在类型上使用“param”?https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/xmldoc/param - Joe Sewell
尽管这是 F#,但我认为这个问题可能会回答你的问题,因为定义类型的代码是相似的(如果我错了,请纠正我,因为我也想知道答案)。 - Streamline
尝试了参数,但没有起作用,因此我已更新问题。 - Xavier John
2个回答

11

对于第一个情况,你收到的警告与文档注释无关。你有一个非空属性,其默认值等于null。这就是为什么你会收到警告。

对于第二个情况,在编译器中已知此问题,并正在修复中,可以查看dotnet/roslyn#49134

根据@matt-johnson-pint的评论进行编辑,此问题已在Visual Studio 16.9和.NET 5.0.200 SDK中得到解决。


3
请注意,错误已在2021年3月2日发布的.NET 5.0.200 SDK中得到解决。 - Matt Johnson-Pint
现在可以向注释中添加<param/>了 - 当您添加///注释时,它不会自动为您创建,但如果您手动添加它们,它确实有效。 - Mog0
@Mog0 你使用的是哪个版本的Visual Studio?这在https://github.com/dotnet/roslyn/pull/52737/中得到了支持(发布于Visual Studio 2022 17 Preview 2)。 - Youssef13
Visual Studio 2019 16.11.0 -(几乎)是目前最新的主流版本。 - Mog0

4
您可以这样写:
public record Person(string FirstName, string LastName)
{
    /// <summary>
    /// Gets the first name.
    /// </summary>
    public string FirstName { get; init; } = FirstName;

    /// <summary>
    ///  Gets the last name.
    /// </summary>
    public string LastName { get; init; } = LastName;
}

这种方式使用(string,string)构造函数和析构函数创建记录,就像在此符号表示法的情况下一样:

public record Person(string firstName, string lastName);

但你也可以在属性上添加注释。

顺便说一句,据我所知,只要属性和参数具有相同的名称和类型,编译器就知道该怎么做,这是合法的。 如果属性应该具有不同的接口,例如使用set而不是init,或者仅使用get等,则也可以使用此方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接