可选参数,与方法签名中的 Out 混合

发布于 2024-11-03 08:59:33 字数 310 浏览 4 评论 0原文

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

虽然这不会造成任何问题,但我发现在使用“out”时有一个扳手正在工作。

例如,

如果我要调用:

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

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

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

I'm replacing a series of method overloads with a handful of methods with named and optional parameters.

While this is causing no problem, I am finding that there's a spanner in the works while using 'out'.

e.g.

if I was to call :

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

The compiler throws an error, as any time I call this method, it doesn't see it or recognise it as a relevant signature for this method.

I realise that any optional paramaters HAVE TO come after the mandatory ones -> is there any such rule for parameters with 'out', or am I missing anything obvious?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

他不在意 2024-11-10 08:59:33

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

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");

If you mean about calling a method defined as per the example, then just (for example):

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

An out parameter cannot be optional (which means it must appear before the optional ones), but can be specified anywhere (as a named argument) - for example:

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

If you want b to be optional, you would need an overload:

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

Now you can call:

foo(123, d: "hi");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文