减少元素数量的函数

问题描述 投票:0回答:1

我有一个函数,如果可能的话可以合并元素。 那就是

public IEnumerable<TElement> TryMerge(IEnumerable<TElement> sequence){}

其中返回的

IEnumerable
的元素少于(或等于)原始序列。 就是这样:

var mergedElements = TryMerge(notMergedElements) // mergedElements.Count()<= notMergedElements is alwas true

我现在的问题是我想要一个这样的界面:

IMerger {TElement[m] TryMerge(TElement[n] sequence) : where n,m int and m<=n}

因此,通过方法签名确保返回的 IEnumerable 具有较少的元素。但不知怎的,这是不可能的。有人有想法吗?

我已经尝试返回元组来控制返回元素的长度。但这仅适用于 15 个元素。

c# ienumerable
1个回答
0
投票

在运行时执行该方法后,您知道

mergedElements
计数是否为 <= the
originalElements
计数。因此,您不能使用通用类型约束来强制执行此操作,因为这是编译时功能。

您可以检查方法中的计数是否符合预期,例如:

Debug.Assert(mergedCount <= originalCount);

但这(也)属于测试

旁注:

TryMerge
似乎是该方法的错误名称,因为这些方法应该返回
bool
指示操作是否成功,并且它们将结果作为
out
参数返回(例如
int.TryParse
)。

© www.soinside.com 2019 - 2024. All rights reserved.