我用一些带有命名参数和可选参数的方法替换了一系列方法重载。
虽然这没有引起任何问题,但我发现在使用“out”时有一个扳手在工作。
例如
如果我打电话:
foo(int a, out int b, int c = -1, string d = "")
编译器会抛出一个错误,因为每当我调用此方法时,它都不会看到它或将其识别为此方法的相关签名。
我意识到任何可选参数都必须在强制性参数之后->对于带有“out”的参数是否有任何此类规则,或者我是否遗漏了任何明显的东西?
我用一些带有命名参数和可选参数的方法替换了一系列方法重载。
虽然这没有引起任何问题,但我发现在使用“out”时有一个扳手在工作。
例如
如果我打电话:
foo(int a, out int b, int c = -1, string d = "")
编译器会抛出一个错误,因为每当我调用此方法时,它都不会看到它或将其识别为此方法的相关签名。
我意识到任何可选参数都必须在强制性参数之后->对于带有“out”的参数是否有任何此类规则,或者我是否遗漏了任何明显的东西?
如果您的意思是调用根据示例定义的方法,那么只需(例如):
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");