假设
new
运算符留给现代 tuple
作为基础。也就是说,它可以被忽略。internal class Program
{
private static (int, int) getVal1 => (1, 2);
private static (int, int) getVal2 => new(3, 4);
private static (int, int) getVal3() { var v = new(5, 6); return v; }
// Error CS8754 There is no target type ... ^^^^^^^^^
static void Main(string[] args)
{
Console.WriteLine(getVal1);
Console.WriteLine(getVal2);
Console.WriteLine(getVal3());
}
}
这是为什么?
因为在
getVal2
方法中,可以推断出类型的类型:
private static (int, int) getVal2 => new(3, 4);
^^^^^^^^^^ type
而对于语句
var x = new(5,6)
,编译器无法推断类型。 x
可以是元组或任何其他具有接受 2 个参数的参数的类型(例如“范围”或“间隔”类型)