我有一个函数,如果可能的话可以合并元素。 那就是
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 个元素。
在运行时执行该方法后,您知道
mergedElements
计数是否为 <= the originalElements
计数。因此,您不能使用通用类型约束来强制执行此操作,因为这是编译时功能。
您可以检查方法中的计数是否符合预期,例如:
Debug.Assert(mergedCount <= originalCount);
但这(也)属于测试。
旁注:
TryMerge
似乎是该方法的错误名称,因为这些方法应该返回 bool
指示操作是否成功,并且它们将结果作为 out
参数返回(例如 int.TryParse
)。