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