首页 > 解决方案 > 如何在 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);

标签: c#tuplesrecordc#-9.0

解决方案


您可以将隐式转换添加到您的记录类型:

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)。这也意味着您从记录类型创建的元组将始终是数据的副本。


推荐阅读