作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在 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 个可能的选项:
params
array要在方法参数中允许超过 2 个元组,请在方法主体中提供默认值注意:选项 1.、2. 和 4. 允许指定任何所需的默认值,而选项 3. 仅限于 default
提供的默认值关键字。
最佳答案
a
和 b
不是常量。所有创建新实例的东西(无论是结构还是类)都不被视为常量,方法签名只允许将常量作为默认值。
也就是说,无法从方法签名中默认元组,您必须创建一个单独的方法。
唯一的出路似乎是使用可为空的参数:
(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/
我是一名优秀的程序员,十分优秀!