1

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

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

例如

如果我打电话:

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

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

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

4

1 回答 1

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");
于 2011-04-26T09:42:11.757 回答