Kon*_*ten 1 c# arrays immutability
我在表单上构建一个对象:
return table.Rows.Cast<DataRow>()
.Select(row => new Something
{
Field = row["field1"] as int?,
Bunch = GetBunch(index)
});
Run Code Online (Sandbox Code Playgroud)
使用GetBunch()如下.
private IList GetBunch(int index) { ... }
Run Code Online (Sandbox Code Playgroud)
它的工作原理应该如此.现在,我们已经注意到我们需要在我们放入Bunch的数组中添加一个额外的元素.由于一系列原因,不能更改方法的签名,也不可能在其中添加额外元素.
我试着像这样添加额外的东西:
return table.Rows.Cast<DataRow>()
.Select(row => new Something
{
Field = row["field1"] as int?,
Bunch = GetBunch(index).Add(new Thingy() { ... })
});
Run Code Online (Sandbox Code Playgroud)
但它不起作用,因为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
};
});
Run Code Online (Sandbox Code Playgroud)
正如@Chris在评论中指出的那样你可以使用lambda语句,你不一定需要使用lamda表达式.你可以在块中做任何你想做的事情,因为它只是一个接受DataRow和返回的方法SomeThing.