C# 不接受“params object?[]values”参数为 null

Ily*_*dik 1 .net c# parameters nullable nullable-reference-types

我有一个这样定义的参数:params object?[] values并且我不能发送 null (即我想要一个内部有一个 null 的数组)。

它确实可以在没有参数的情况下工作。

错误是:Cannot convert null literal to non-nullable reference type.

public class Foo
{
    private void DoesNotWork(params object?[] values)
    {
    }
    
    private void DoesWork1(object? value)
    {
    }
    
    private void DoesWork2(object?[] values)
    {
    }

    public void Test()
    {
        DoesNotWork(null);
        DoesWork1(null);
        DoesWork2(new object?[] { null });
    }
}
Run Code Online (Sandbox Code Playgroud)

我是否做错了什么,或者编译器是否存在某些限制不允许这样做?

PS 如果方法“DoesNotWork”来自未打开 nullable 的库,它也可以工作,即它的定义如下:DoesNotWork(params object[] values),所以我可以在那里发送 null 。

PPS 我发现这个解决方法也有效: DoesNotWork((object?) null);

PPPSDoesNotWork(null!);也能发挥作用

Flo*_*aku 5

由于提供的单个参数为 null,因此您收到错误,编译器将发送 null 而不是使用提供的参数创建数组:

DoesNotWork(null); // creates no array
DoesNotWork((object?)null); // creates array with one null element
DoesNotWork(null, null); // create array with two null elements
Run Code Online (Sandbox Code Playgroud)

如果您要将方法的签名更改为: void DoesNotWork(params object?[]? values) 那么您将不会收到警告,或者您!可以像以前一样抑制警告