gpt4 book ai didi

c# - Interlocked.CompareExchange 可以抛出 NullReferenceException 吗?

转载 作者:太空狗 更新时间:2023-10-30 01:01:40 27 4
gpt4 key购买 nike

来自 https://msdn.microsoft.com/en-us/library/bb297966(v=vs.110).aspx

[ComVisibleAttribute(false)]
public static T CompareExchange<T>(
ref T location1,
T value,
T comparand
)
where T : class

NullReferenceException    The address of location1 is a null pointer.

但是当我对 location1 使用 null 引用时,我没有收到任何错误:

class A { }
class Program
{
static void Main(string[] args)
{
A dest = null;
A src = new A();
// If dest is null, then replace with src.
Interlocked.CompareExchange(ref dest, src, null);
}
}

这样做可以吗?这是否会在更高版本的 .NET 中引发 NullReferenceException 的危险?

最佳答案

文档在这里具有误导性,如 location1不能是 null因为在 C# 中,它必须始终引用现有变量。所以是的,没关系,因为您所说的是“如果 location1 已经是 src,则将 location1(当前包含 null)设置为 null”。

事实上因为location1必须是引用 在 C# 中传递空引用是不可能的,尽管可以(并且有效)传递对空值的引用,因此此函数永远不会抛出 NullReferenceException。 .

我怀疑这是从 Win32 api 移植过来的文档造成的,您必须在其中传递指向位置的指针以读/写变量,传递 null 将是错误的这里。

关于c# - Interlocked.CompareExchange 可以抛出 NullReferenceException 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37723030/

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