gpt4 book ai didi

c# - 如何为 c#7 元组中的方法参数指定默认值?

转载 作者:太空狗 更新时间:2023-10-29 17:44:22 24 4
gpt4 key购买 nike

在 C# 中,您可以按照描述定义默认参数 here .我正在玩弄元组和 C#7(使用 LinqPad 并打开 Preferences -> Queries -> Use Roslyn assembly)如下:

void Main()
{
var result=AddTuples((1, 2), (3, 4));
Console.WriteLine($"Result is: {result}");
}

(int x, int y) AddTuples((int x, int y) a, (int x, int y) b)
{
return (a.x + b.x, a.y + b.y);
}

这很好用,它显示了 a 和 b 的总和:

Result is: (4, 6)

现在我试图修改 AddTuples 以使用默认参数,但不知何故我不知道如何做。我试过的是这样的:

(int x, int y) AddTuples2((int x, int y) a = (0, 0),  (int x, int y) b = (0, 0))
{
return (a.x + b.x, a.y + b.y);
}

但我收到错误信息:

CS1736 Default parameter value for 'a' must be a compile-time constant

CS1736 Default parameter value for 'b' must be a compile-time constant

(使用 DotNetFiddle 在线尝试)

我做错了什么?


更新

感谢您提供的出色答案,我学到了很多东西。让我总结一下:要为元组参数设置默认值,有 3 个可能的选项:

  1. 老式方法:重载方法,在方法体中提供默认值。缺点:如果你有超过 2 个元组,重载会变得很麻烦。
  2. Use nullable tuples , 在方法体中提供默认值。
  3. Use tuple's default values
  4. Use a params array要在方法参数中允许超过 2 个元组,请在方法主体中提供默认值

注意:选项 1.、2. 和 4. 允许指定任何所需的默认值,而选项 3. 仅限于 default 提供的默认值关键字。

最佳答案

ab 不是常量。所有创建新实例的东西(无论是结构还是类)都不被视为常量,方法签名只允许将常量作为默认值。

也就是说,无法从方法签名中默认元组,您必须创建一个单独的方法。

唯一的出路似乎是使用可为空的参数:

(int x, int y) AddTuples2((int x, int y)? a = null, (int x, int y)? b = null)
{
(int x, int y) aNN = a ?? (0,0);
(int x, int y) bNN = b ?? (0,0);
return (aNN.x + bNN.x, aNN.y + bNN.y);
}

关于c# - 如何为 c#7 元组中的方法参数指定默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41892289/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com