我正在使用包含带引用类型的方法的API。我并不总是需要将信息传递给方法。有没有办法在内联传递默认值或空值?
我目前正在做的事情:
MyObject obj = null;
MyMethod(ref obj);
我想做的是:
MyMethod(ref null);
我理解为什么这不起作用,但它得到了重点。
答案 0 :(得分:3)
您无法修改null
。声明为ref
(或out
)的参数必须是命名变量。 null
是一个值。
不是引用类型 - 即引用参数传递。这意味着MyMethod
可以修改对obj
的引用。
该API很可能期望给调用者一些东西。仔细阅读文档以了解它的期望。
在我最好的猜测中,调用者应始终在ref
时为其提供值。这样,该方法可以根据需要使用它。否则,该方法应该将其声明为out
。
答案 1 :(得分:1)
null
是一个值... Ref关键字意味着您应该将引用传递给某个实例(通常只是一个变量)而不是值。这就是为什么当方法期望引用变量时 - 它不接受null
。例如:
void A(ref string str) // expects reference not value
{
}
void A(string str) // expects value not reference
{
}
答案 2 :(得分:1)
创建第二个方法,不带参数:
private void MyMethod()
{
MyObject notNeeded = null;
MyMethod(ref notNeeded);
}
然而,正如其他人已经提到的那样,你的设计似乎有些不对劲,如果这种方法不需要给定的参考。也许你应该考虑你的方法正在做什么,也许可以把它分成多种方法。