|
|
1
14
如果您想为
尽管其他人已经发布了带有扩展方法的解决方案,但这里还有另一个方法,它的优点是保存了集合的实际类型:
这样使用:
|
|
|
2
5
编辑
编辑2 : 也许有人会发现这个技巧很有用,可以利用嵌套对象初始值设定项和集合初始值设定项来设置属性并将值添加到现有实例中。
|
|
|
3
2
}
托马斯是对的
|
|
|
4
1
注意,我们必须用一个新名称来创建它,就像一个实例成员与签名(您已经在抱怨的“Add”)匹配,那么就不会调用扩展方法。 不过,我还是建议你不要这样。虽然我喜欢自己链接,但在C库中这种情况很少见,这意味着它不像其他语言那样惯用(这不是技术原因,尽管属性如何工作的一些差异在某些其他语言中更容易引起这种情况,正如事物在公共性方面的方式一样)。因此,它所支持的构造在C中不像其他地方那么熟悉,而且您的代码更容易被其他开发人员误读。 |
|
|
5
1
您可以使用具有不同名称的扩展方法:
保留名字
并创建如下代码:
不过看起来不太好。 也许如果我们改变类型,我们可以有一个更好的语法。
您可以使用以下方法:
|
|
6
1
我相信您不会喜欢这个答案,但是List<.Add()是这样工作的,这是一个很好的理由。它非常快,需要与数组竞争,因为它是一种低级方法。不过,这只是一根头发太大了,无法被JIT优化器内联。它无法优化您需要返回列表引用的return语句。
返回引用的Add()版本使代码速度降低了近5%。对于所提出的扩展方法来说,这要糟糕得多,它涉及到整个额外的堆栈帧。 |
|
|
7
0
我喜欢其他人提到的扩展方法,因为它似乎很好地回答了这个问题(尽管您必须给它一个不同于现有Add()的方法签名)。而且,在这样的调用中,对象返回似乎确实存在一些不一致之处(我原以为这是一个可变的问题,但stringbuilder是可变的,不是吗?),所以你提出了一个有趣的问题。 不过,我很好奇AddRange方法是否不能作为现成的解决方案工作?有没有什么特别的原因让你想把命令串起来,而不是把所有的东西都作为一个数组传入?
|
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |