它当然没有脱离.NET框架的标准实践。当我看到一个a + b
我总是假设会有新的东西被创造出来。
static void Main(string[] args)
{
var list = BuildList(ImmutableList<int>.Empty);
var sum = (list + 500).Sum();
Console.WriteLine(sum);
Console.ReadLine();
}
static ImmutableList<int> BuildList(ImmutableList<int> list)
{
if (list.Count < 1000)
{
return BuildList(list + list.Count);
}
return list;
}
Update
请参阅乔恩·斯基特 (Jon Skeet) 的帖子,了解该做什么不可变列表上的命名方法 https://stackoverflow.com/questions/521893/whats-the-best-name-for-a-non-mutating-add-method-on-an-immutable-collection.
令人惊讶的反应
我很惊讶地看到这么多答案都同意这是有道理的。原则上我也同意,但对我来说,阅读冗长的代码比那些不喜欢阅读简洁代码的人容易得多。从我的工作经验来看,他们似乎是大多数。
我个人不建议重载运算符,例如+
对于任何不应该被视为基元的类。特别是,在我看来,集合永远不应该重载运算符。
当您有一个小的不可变类或结构并且其行为类似于“原始”类型时,运算符重载就有意义。然而,当您开始尝试对其他类执行此操作时,它确实会影响可维护性。
我建议改为进行显式方法调用。
阅读评论后,我的建议是使用Concat()
(匹配可枚举.Concat http://msdn.microsoft.com/en-us/library/bb302894.aspx框架中)。我更喜欢的另一个选择是Construct()
, ala cons http://en.wikipedia.org/wiki/Cons(尽管 cons 通常放在前面),为了使用法非常清楚:
var list = BuildList(ImmutableList<int>.Empty);
var list2 = list.Concat(500);
// Or: var list2 = list.Construct(500);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)