我有一个。具有不可为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数组与此类型匹配。