方法的内联引用类型?

时间:2015-06-26 13:31:43

标签: c# methods reference

我正在使用包含带引用类型的方法的API。我并不总是需要将信息传递给方法。有没有办法在内联传递默认值或空值?

我目前正在做的事情:

MyObject obj = null;
MyMethod(ref obj);

我想做的是:

MyMethod(ref null);

我理解为什么这不起作用,但它得到了重点。

3 个答案:

答案 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);
}

然而,正如其他人已经提到的那样,你的设计似乎有些不对劲,如果这种方法不需要给定的参考。也许你应该考虑你的方法正在做什么,也许可以把它分成多种方法。