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



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

我想将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对其进行初始化。您应该创建一个可为null的对象数组,如下所示:new object?[] { null }

用方法声明来回答您的困惑:

nullability运算符总是引用上一个类型。

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

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

相关内容