如何解决使用[DisallowNull]与非空引用类型
我正在学习C#8.0中可空引用类型的来龙去脉
在阅读this blog有关可为空的引用类型的同时,我对以下示例感到困惑。
public static HandleMethods
{
public static void DisposeAndClear([DisallowNull] ref MyHandle? handle)
{
...
}
}
作者展示了在这种情况下如何使用[DisallowNull]
属性。但是,我的查询是为什么您这里完全需要该属性?这段代码不一样吗?
public static HandleMethods
{
public static void DisposeAndClear(ref MyHandle handle)
{
...
}
}
通过删除属性,并在?
的末尾添加MyHandle
,这会是一个类似的选择吗?
编辑:
感谢UnholySheep,我相信我现在已经明白了。
public static void DisposeAndClear([DisallowNull] ref MyHandle? handle)
{
handle = null;
}
调用此版本的函数时,handle
不能为null。但是,可以在函数内部将其设置为null,因此当函数返回时,使用handle
的所有内容都需要检查handle
是否为空。
解决方法
基于评论中的讨论
博客文章的重要部分如下:
此API的典型用法是我们有一个非null实例, 按引用传递,但清除后,引用为空
这意味着该方法接受非null
对象,但是在方法handle
的某个时刻将被设置为null
由于在以非空引用作为参数(handle
的版本中,不允许将null
设置为ref MyHandle handle
,因此必须使用其他版本
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。