【发布时间】:2015-09-13 12:13:54
【问题描述】:
我在 c++ 中有这样的函数:
// C++
bool Foo(int* retVal = NULL)
{
// ...
if (retVal != NULL)
*retVal = 5;
// ...
return true;
}
我可以通过两种方式使用函数:
int ret;
Foo(&ret);
Foo();
当我用 C# 编写代码时,我使用了 ref 关键字:
// C#
bool Foo(ref int retVal = null)
{
// ...
if (retVal != null)
{
retVal = 5;
}
// ...
return true;
}
但是编译器说:
ref 或 out 参数不能有默认值。
我该如何解决这个问题?
【问题讨论】:
-
你可以使用像
int?这样的可空类型。见:msdn.microsoft.com/en-us/library/2cf62fcy.aspx -
@NathanOliver 请注意,虽然这适用于
ref int,但对于像ref string这样的参数,这不起作用 -
@xanatos 在 c# 中默认不是可以为空的字符串,因此您不需要使用
?? -
@NathanOliver 但是你无法区分
ref null string的传递和“我不想传递string”......在C 中它将是char** str.你可以有str == NULL或*str == NULL -
你可以简单地返回一个复合对象,
Tuple<bool, int>如果你是懒惰的,如果你不是自定义类型。
标签: c# c++ reference arguments