gpt4 book ai didi

c# - 添加到可变类型,就好像它是不可变的(无序)

转载 作者:太空宇宙 更新时间:2023-11-03 18:29:34 24 4
gpt4 key购买 nike

我在窗体上构建一个对象:

return table.Rows.Cast<DataRow>()
.Select(row => new Something
{
Field = row["field1"] as int?,
Bunch = GetBunch(index)
});

使用 GetBunch() 如下。

private IList GetBunch(int index) { ... }

它按预期工作。现在,我们注意到我们需要向放入 Bunch 的数组添加一个额外的元素。由于多种原因,更改方法的签名不是一个选项,在其中添加额外的元素也不可行。

我试着像这样添加额外的东西:

return table.Rows.Cast<DataRow>()
.Select(row => new Something
{
Field = row["field1"] as int?,
Bunch = GetBunch(index).Add(new Thingy() { ... })
});

但它不起作用,因为 Add() 没有返回包含新元素的原始数组。它返回一个 int。如果原始对象是不可变的,Add() 的结果将是我希望的结果,但显然不是。

是否有可能使可变对象不可变?如果不是(因为我很确定不是),我该如何轻松处理呢? (很容易 = 无需存储创建的内容,然后访问它并将元素添加到 Bunch 属性的数组。)

注意,在这种情况下,结果的顺序并不重要。正确的类型应该是某种类型的,但我被现有的设计束缚住了。

最佳答案

可能是这样的:

return table.Rows.Cast<DataRow>()
.Select(row => {
var list = GetBunch(index);
list.Add(new Thingy() { ... });
return new SomeThing
{
Field = row["field1"] as int?,
Bunch = list
};
});

正如@Chris 在评论中指出的那样,您可以使用 lambda 语句,但不一定需要使用 lamda 表达式。您可以在 block 内做任何您想做的事情,因为它只是一个采用 DataRow 的方法 并返回 SomeThing

关于c# - 添加到可变类型,就好像它是不可变的(无序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25667568/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com