对象数组上的可为空的引用类型

Nullable reference types on object array

我有一个具有不可为 null 的引用类型的 .NET 6 项目。

我想将 objects 参数限制为不可为 null 的对象数组。

我有 4 种可能的方法,假设其中一种应该有效。

public void Method1(object[] objects)

public void Method2(object[]? objects)

public void Method3(object?[] objects)

public void Method4(object?[]? objects)

方法 2 和 4 都接受 null。所以我只剩下 1 和 3 但我都收到了警告:

CS8625 无法将 null 文字转换为不可为 null 的引用类型

我希望方法 3 可以在没有警告的情况下运行:

Method3(new object[] { null });

有什么办法可以做到吗?

我的问题在其中一条评论中得到了回答。我当然应该使用:

 Method3(new object?[] { null });

这个回答只是为了完整性,所以答案不仅在评论中

问题不在于您的方法及其参数的声明,而在于调用。您正在创建一个不可为 null 的对象数组,并使用一个 null 对其进行初始化。您应该创建一个可空对象数组,如下所示:new object?[] { null }

回答您对方法声明的困惑:

可空性运算符始终引用前一个类型。

因此在 object[]? 中,可空性运算符仅适用于数组。这意味着 null 和一个非空对象数组适合这种类型。

当您编写 object?[] 时,可空性运算符仅适用于 object。这意味着可空对象的不可空数组匹配此类型。