可选参数,在方法签名中与Out混合使用

时间:2011-04-26 09:32:31

标签: c# overloading optional-parameters out

我正在用一些带有命名和可选参数的方法替换一系列方法重载。

虽然这没有引起任何问题,但我发现在使用'out'时,工作中有一个扳手。

e.g。

如果我打电话:

 foo(int a, out int b, int c = -1, string d = "")

编译器抛出一个错误,因为每当我调用此方法时,它都不会看到它或将其识别为此方法的相关签名。

我意识到任何可选的参数都必须在强制性参数之后 - >对于带有'out'的参数是否存在任何此类规则,或者我是否遗漏了任何明显的参数?

1 个答案:

答案 0 :(得分:3)

如果您的意思是调用根据示例定义的方法,那么只是(例如):

int x;
foo(123, out x, d: "hi");

out参数不能是可选的(这意味着它必须出现在可选参数之前),但可以在任何地方指定(作为命名参数) - 例如:

int x;
foo(b: out x, a: 123);

如果您希望b是可选的,则需要重载:

void foo(int a, int c = -1, string d = "")
{
    int b;
    foo(a, out b, c, d);
}

现在你可以致电:

foo(123, d: "hi");