c# - C# 9.0 记录可以支持字典和列表等数据结构吗?
问题描述
我已经看到了 C# 9.0 中新记录功能的几个示例。即,能够更新单个属性以创建新的不可变记录。我很想知道with
语法是否允许我将新条目插入字典之类的东西,创建一个新的不可变字典以及构成记录的所有兄弟属性。
例如,我可以做这样的事情吗?
public record Person
{
public string Name;
}
public record Car
{
public string Model;
public Dictionary<string, Person> Riders;
}
var car = new Car
{
Model = "Delorean",
Riders = ("driver", new Person { Name = "Doc Brown" })
};
var newCar = car with
{
Riders with ("passenger1", new Person { Name = "Marty McFly" })
};
解决方案
正如此评论中所述,您肯定不能这样做,因为with
仅适用于记录类型。但无论如何,你的意思也不完全清楚。这个Dictionary<TKey, TValue>
类从一开始就不是一成不变的,所以with
似乎没有必要。您希望上面建议的语法做什么?
如果您的意思是替换字典内容,您可以使用当前with
语法轻松地做到这一点:
var newCar = car with
{
Riders = new Dictionary<string, Person> { { "passenger1", new Person { Name = "Marty McFly" } } }
};
如果您打算添加到现有字典内容,但使用新实例,那不是很优雅,但仍然很容易,对我来说似乎几乎一样好:
var newCar2 = car with
{
Riders = new Dictionary<string, Person>(car.Riders)
{
{ "passenger1", new Person { Name = "Marty McFly" } }
}
};
您是否希望避免该new Dictionary...
部分的东西?我不相信在当前版本的 C# 中这是可能的,即使在过去几个版本中进行了所有增强以支持集合初始值设定项。
推荐阅读
- vue.js - Mapbox-gl Draw 控件在 Vue 中不显示
- esp8266 - ESP8266 SoftwareSerial 丢失从 Nextion 返回的最后一个字节(但适用于 Nano)
- excel - 如何使用熊猫仅更新 Excel 文件中的一张工作表
- javascript - 如何为 Angular 12 App 配置自定义 webpack 构建
- powerbi - DAX PowerBI:根据其他列计算列的总和
- r - 使用 R 从另一个 data.table 进行条件查找,将新列添加到 data.table
- reactjs - ReactJs 无法在 useEffect 中获取异步内容表单 api 调用并稍后在组件中使用它
- excel - TestComplete 以编码格式读取 excel 数据
- assembly - 汇编 movsbq 指令
- angular8 - Angular 8 中的 [(selection)] 是什么?