Jas*_*ans 5 c# nullable-reference-types
我正在了解 C# 8.0 中可空引用类型的来龙去脉
在阅读有关可为空引用类型的博客时,我对以下示例感到有些困惑。
public static HandleMethods
{
public static void DisposeAndClear([DisallowNull] ref MyHandle? handle)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
作者展示了如何[DisallowNull]在这种情况下使用属性。但是,我的疑问是您为什么需要这里的属性?这段代码不一样吗?
public static HandleMethods
{
public static void DisposeAndClear(ref MyHandle handle)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
通过删除属性,并?在 末尾MyHandle,这会是一个类似的替代方案吗?
编辑:
感谢 UnholySheep,我相信我现在明白了。
public static void DisposeAndClear([DisallowNull] ref MyHandle? handle)
{
handle = null;
}
Run Code Online (Sandbox Code Playgroud)
在调用这个版本的函数时,handle不能为null进去,但是在函数内部可以设置为null,所以当函数返回时,任何使用都handle需要检查是否handle为null。
根据评论中的讨论
博客文章的重要部分如下
此 API 的典型用途是,我们有一个通过引用传递的非 null 实例,但当它被清除时,引用为 null
这意味着该方法接受非null对象,但在该方法中的某个点将handle被设置为null
As在采用不可空引用作为参数的版本中不允许设置 ( handle) ,必须使用其他版本nullref MyHandle handle
| 归档时间: |
|
| 查看次数: |
248 次 |
| 最近记录: |