方法的内联引用类型

本文关键字:引用类型 方法 | 更新日期: 2023-09-27 18:00:00

我正在使用一个API,该API包含一个引用类型的方法。我并不总是需要将信息传递到方法中。有没有某种方法可以内联传递默认值或null值?

我目前正在做的事情:

MyObject obj = null;
MyMethod(ref obj);

我想做的是:

MyMethod(ref null);

我理解为什么这不起作用,但它明白了要点。

方法的内联引用类型

您不能修改null。声明为ref(或out)的参数必须是命名变量。null是一个值。

它不是引用类型,而是一个按引用传递的参数。这意味着MyMethod可以修改对obj的引用。

那个API可能期望给调用者一些东西。仔细阅读文档,看看它期望得到什么。

在我的最佳猜测中,当它是ref时,调用者应该始终为它提供一个值。这样,该方法就可以根据需要使用它。否则,该方法应该将其声明为out

创建第二个不带参数的方法:

private void MyMethod()
{
    MyObject notNeeded = null;
    MyMethod(ref notNeeded);
}

尽管如此,正如其他人已经提到的那样,如果这种方法不总是需要给定的参考,那么你的设计似乎有问题。也许你应该考虑一下你的方法在做什么,也许可以把它分成多个方法。

null是一个值。。。Ref关键字意味着您应该传递对某个实例(通常只是一个变量)的引用,而不是值。这就是为什么当方法期望引用一个变量时,它不接受null。例如:

void A(ref string str)  // expects reference not value
{
} 
void A(string str)  // expects value not reference
{
}