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