CS8625无法将null文本转换为Interlocked的不可为null的引用类型警告.Exchange(ref c,



以下代码在中正常工作。NET核心3.1,但错误地生成警告CS8625无法将null文本转换为不可为null的引用类型:

#nullable enable
using System.Threading;
namespace InterlockedExchangeNullProblem {
public class Class1 {
public Class1() {
object? o = new object();
var o1 = Interlocked.Exchange(ref o, null); // ok
class2? c = new class2();
var c1 = Interlocked.Exchange(ref c, null); // error CS8625 Cannot convert null literal to non-nullable reference type.
}
}
public class class2{}
}

如果它适用于object?,那么它也应该适用于class2?

解决方案:

var c2 = Interlocked.Exchange<class2?>(ref c, null);

注意:编译器使c1的类型为class2,而不是class2?

如果你同意这需要纠正,那么请投赞成票:

developercommunity.visualstudio.com:已互锁。Exchange:编译器选择了具有可为null类型的错误Exchange

最新更新