如何在c#9中使用记录作为元组参数
假设有这样的记录如何在c#9中使用记录作为元组参数,c#,tuples,record,c#-9.0,C#,Tuples,Record,C# 9.0,假设有这样的记录 公共记录示例记录(int a、int b); 和一种方法 public int ExampleMethod((int a,int b)t) { 返回t.a+t.b; } 可以这样做以记录作为元组参数吗 var t=新的示例记录(a:1,b:2); 举例法(t); 您可以向记录类型添加隐式转换: public record ExampleRecord(int a, int b) { public static implicit operator ValueTuple&
公共记录示例记录(int a、int b);
和一种方法
public int ExampleMethod((int a,int b)t)
{
返回t.a+t.b;
}
可以这样做以记录作为元组参数吗
var t=新的示例记录(a:1,b:2);
举例法(t);
您可以向记录类型添加隐式转换:
public record ExampleRecord(int a, int b)
{
public static implicit operator ValueTuple<int, int> (ExampleRecord record)
{
return (record.a, record.b);
}
}
您可以创建扩展方法。例如:
public static class ExampleRecordExtensions
{
public static (int, int) ToTuple(this ExampleRecord record)
{
return (record.a, record.b);
}
}
这样使用:
var t = new ExampleRecord(a: 1, b: 2);
ExampleMethod(t);
var t = new ExampleRecord(a: 1, b: 2);
ExampleMethod(t.ToTuple());
var t = new ExampleRecord(a: 1, b: 2);
ExampleMethod((_, _) = t);
或者你可以使用解构主义。这样使用:
var t = new ExampleRecord(a: 1, b: 2);
ExampleMethod(t);
var t = new ExampleRecord(a: 1, b: 2);
ExampleMethod(t.ToTuple());
var t = new ExampleRecord(a: 1, b: 2);
ExampleMethod((_, _) = t);
我提醒你,记录类型是类。这些元组是值类型(
ValueTuple
)。这也意味着从记录类型创建的元组将始终是数据的副本。您可以向记录类型添加隐式转换:
public record ExampleRecord(int a, int b)
{
public static implicit operator ValueTuple<int, int> (ExampleRecord record)
{
return (record.a, record.b);
}
}
您可以创建扩展方法。例如:
public static class ExampleRecordExtensions
{
public static (int, int) ToTuple(this ExampleRecord record)
{
return (record.a, record.b);
}
}
这样使用:
var t = new ExampleRecord(a: 1, b: 2);
ExampleMethod(t);
var t = new ExampleRecord(a: 1, b: 2);
ExampleMethod(t.ToTuple());
var t = new ExampleRecord(a: 1, b: 2);
ExampleMethod((_, _) = t);
或者你可以使用解构主义。这样使用:
var t = new ExampleRecord(a: 1, b: 2);
ExampleMethod(t);
var t = new ExampleRecord(a: 1, b: 2);
ExampleMethod(t.ToTuple());
var t = new ExampleRecord(a: 1, b: 2);
ExampleMethod((_, _) = t);
我提醒你,记录类型是类。这些元组是值类型(
ValueTuple
)。这也意味着从记录类型创建的元组将始终是数据的副本。不,恐怕没有。虽然记录可以解构,但这与将它们转换为元组不同——相反,它使用元组语法将记录解构为许多不同的变量。您为什么要这样做是有疑问的。要么使用ValueTuple
,善待您的分配并接受复制。或者使用不可变记录,获取分配,并通过引用传递。两者兼而有之就像逃离马戏团加入孤儿院,恐怕没有。虽然记录可以解构,但这与将它们转换为元组不同——相反,它使用元组语法将记录解构为许多不同的变量。您为什么要这样做是有疑问的。要么使用ValueTuple
,善待您的分配并接受复制。或者使用不可变记录,获取分配,并通过引用传递。两者兼而有之就像逃离马戏团加入孤儿院