c# - 如何在 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
)。这也意味着您从记录类型创建的元组将始终是数据的副本。
推荐阅读
- java - 有没有一种方法可以在 Java 中从头开始使用 Kafka 流(而不是通过 KafkaConsumer)读取消息?
- python-3.x - 无论如何,您是否可以检查 Azure CLI 在后台执行哪些 API 调用?
- javascript - 如何在 javascript 中检查第三方 cookie 是否被阻止
- python - 如何从数组中打印表格?
- c# - 如何使用 MVP 模式在 WPF 中实现 INotifyPropertyChanged
- c# - Deedle的速记创造新系列定长
- flutter - 如何将颤振模块导入颤振项目?
- notepad++ - Notepad++ 以一定间隔删除行(例如,使用 Skip 和 Take)
- git - 强制推送后如何取回已删除的文件
- c++ - boost::program_options 在 Klocwork 中生成 MLK.MUST