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!);也能发挥作用
由于提供的单个参数为 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)
那么您将不会收到警告,或者您!可以像以前一样抑制警告