比如 void F(params object[] param)
我调用时如果用 F(null) , 接收到的并不是 {null}, 而是null
那就这样Fun(new object[] { null });
这样是可以,但是要求所有调用的地方做判断了
if (o == null)
Fun(new object[] {});
else
Fun(o);
@白衣如花: 那没办法了,只能像你前面写的一样,在方法里调整
可以试试 F(null, null)
在 C# 中,使用 params 关键字声明的参数数组允许你向函数传递不定数量的参数。当你使用 F(null) 调用函数时,null 被视为一个参数,而不是一个包含一个空对象的数组。
如果你想传递一个空的对象数组,可以通过如下方式:
csharp
Copy code
F(new object[] { });
这样会创建一个长度为零的对象数组,并将其作为参数传递给 F 函数。
不行,你这个代码参数数量为0
而我的本意是传1个为null的参数
应用场景是我提供了全局注册和调用的消息的消息中心,以消息名称为key,匿名委托为value
有消息通知时,使用Message[messageName].DynamicInvoke(param)的方式来实现消息处理
所以需要参数的数量和我注册时声明的严格一致。
我现在的做法是判断param是否为null,为null的话,我就做一个处理
param = new Object[1];
倒是能用,只是很好奇当时设计params语法功能的时候,没考虑过传单个null对象的情况么。。