对象数组上的可为空的引用类型
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
。这意味着可空对象的不可空数组匹配此类型。
我有一个具有不可为 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
。这意味着可空对象的不可空数组匹配此类型。