gpt4 book ai didi

c# - C# 8 是否注释可为 null 的属性和参数?

转载 作者:行者123 更新时间:2023-12-02 01:32:28 27 4
gpt4 key购买 nike

我很好奇可空引用类型如何工作,不是在您自己的代码库中,而是在已编译的库中。 C# 是否能够知道属性或参数是否可为空,或许可以检查某些编译器添加的属性是否存在?

最佳答案

VS2019 预览版 1 和预览版 2 之间的行为似乎发生了变化,这可能是由于可空上下文的更改方式所致。不再有每个程序集或每个类型的属性。当然,它可能会再次改变,

在 VS2019 Preview 2 中,表达可为空或不可为空信息(参数和返回类型)的成员的每个部分均使用 NullableAttribute 单独进行属性,如有必要,该属性包含在程序集本身中。该属性有两个构造函数:

NullableAttribute(byte)
NullableAttribute(byte[])

当参数/返回类型的可空性的各个方面都相同时,使用byte 形式。当单个元素因泛型或数组而混合存在可空性时,将使用 byte[]。在这两种情况下,1 用于“不可为空”,2 用于“可为空”。例如:

public class Test
{
public string? Foo(string input) { ... }

public List<string>? Bar() { ... }
}

编译为:

public class Test
{
[return:Nullable(2)]
public string Foo([Nullable(1)] string input) { ... }

[return: Nullable(new byte[] { 1, 2 })]
public List<string> Bar() { ... }
}

这使得任何检查程序集的代码(无论是编译器将其用作引用还是其他工具)都可以理解每个成员的意图。

我在 a blog post 中写了更多相关内容但这应该足以了解要点。

关于c# - C# 8 是否注释可为 null 的属性和参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53658961/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com