如何在 C# 9 中使用记录作为元组参数
how to work with record as tuple parameter in c# 9
假设有这样一条记录
public record ExampleRecord(int a, int b);
和一个方法
public int ExampleMethod((int a, int b) t)
{
return t.a + t.b;
}
是否可以像这样将记录用作元组参数?
var t = new ExampleRecord(a: 1, b: 2);
ExampleMethod(t);
您可以向您的记录类型添加隐式转换:
public record ExampleRecord(int a, int b)
{
public static implicit operator ValueTuple<int, int> (ExampleRecord record)
{
return (record.a, record.b);
}
}
这样使用:
var t = new ExampleRecord(a: 1, b: 2);
ExampleMethod(t);
您可以制作扩展方法。例如:
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.ToTuple());
或者你可以使用解构。像这样使用:
var t = new ExampleRecord(a: 1, b: 2);
ExampleMethod((_, _) = t);
我提醒你,记录类型是类。这些元组是值类型 (ValueTuple
)。这也意味着您从记录类型创建的元组将始终是数据的副本。
假设有这样一条记录
public record ExampleRecord(int a, int b);
和一个方法
public int ExampleMethod((int a, int b) t)
{
return t.a + t.b;
}
是否可以像这样将记录用作元组参数?
var t = new ExampleRecord(a: 1, b: 2);
ExampleMethod(t);
您可以向您的记录类型添加隐式转换:
public record ExampleRecord(int a, int b)
{
public static implicit operator ValueTuple<int, int> (ExampleRecord record)
{
return (record.a, record.b);
}
}
这样使用:
var t = new ExampleRecord(a: 1, b: 2);
ExampleMethod(t);
您可以制作扩展方法。例如:
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.ToTuple());
或者你可以使用解构。像这样使用:
var t = new ExampleRecord(a: 1, b: 2);
ExampleMethod((_, _) = t);
我提醒你,记录类型是类。这些元组是值类型 (ValueTuple
)。这也意味着您从记录类型创建的元组将始终是数据的副本。