如何在 C# 9 中将记录转换为元组

Jir*_*ffe 3 c# tuples record c#-9.0

假设有这样一条记录

public record ExampleRecord(int a, int b);
Run Code Online (Sandbox Code Playgroud)

和一个方法

public int ExampleMethod((int a, int b) t)
{
    return t.a + t.b;
}
Run Code Online (Sandbox Code Playgroud)

是否可以执行类似的操作来将记录用作元组参数?

var t = new ExampleRecord(a: 1, b: 2);
ExampleMethod(t);
Run Code Online (Sandbox Code Playgroud)

The*_*aot 7

您可以向记录类型添加隐式转换:

public record ExampleRecord(int a, int b)
{
    public static implicit operator ValueTuple<int, int> (ExampleRecord record)
    {
        return (record.a, record.b);
    }
}
Run Code Online (Sandbox Code Playgroud)

像这样使用:

var t = new ExampleRecord(a: 1, b: 2);
ExampleMethod(t);
Run Code Online (Sandbox Code Playgroud)

您可以创建扩展方法。例如:

public static class ExampleRecordExtensions
{
    public static (int, int) ToTuple(this ExampleRecord record)
    {
        return (record.a, record.b);
    }
}
Run Code Online (Sandbox Code Playgroud)

像这样使用:

var t = new ExampleRecord(a: 1, b: 2);
ExampleMethod(t.ToTuple());
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用解构主义。像这样使用:

var t = new ExampleRecord(a: 1, b: 2);
ExampleMethod((_, _) = t);
Run Code Online (Sandbox Code Playgroud)

我提醒您记录类型是类。这些元组是值类型 ( ValueTuple)。这也意味着您从记录类型创建的元组将始终是数据的副本。