当然不会脱离.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;
}
更新
请参阅 Jon Skeet 关于要做什么的帖子 name methods on immutable lists .
令人惊讶的 react
我很惊讶地看到这么多的答案都同意这是有道理的。原则上我也同意,但对我来说阅读冗长的代码比让那些不喜欢简洁的人阅读简洁的代码要容易得多。从我的工作经验来看,他们似乎是大多数。
最佳答案
我个人不建议为任何不应被视为原始类的类重载像 +
这样的运算符。特别是,在我看来,集合永远不应该使运算符重载。
当您有一个小型的不可变类或结构,其行为类似于“原始”类型时,运算符重载就有意义了。但是,当您开始尝试为其他类执行此操作时,它确实会影响可维护性。
我建议改为进行显式方法调用。
阅读评论后,我的建议是使用 Concat()
(以匹配框架中的 Enumerable.Concat)。我更喜欢的另一个选择是 Construct()
,ala cons (虽然 cons 通常在前面),使用法非常清楚:
var list = BuildList(ImmutableList<int>.Empty);
var list2 = list.Concat(500);
// Or: var list2 = list.Construct(500);
关于c# - 重载 '+' 的不可变列表是否有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3428667/