我的问题是命名、设计和实施选择。 我可以看到,自己在如何解决问题方面有两个不同方向,我很想知道,哪些人可能已经提出类似关切,会处理该问题。 它是部分美学、部分功能。
A little background on the code... I created a type called ISlice<T>
that provides a reference into a section of a source of items which can be a collection (e.g. array, list) or a string. The core support comes from a few implementation classes that support fast indexing using the Begin and End markers for the slice to get the item from the original source. The purpose is to provide slicing capabilities similar to what the Go language provides while using Python style indexing (i.e. both positive and negative indexes are supported).
To make creating slices (instances of ISlice<T>
) easier and more "fluent", I created a set of extension methods. For example:
static public ISlice<T> Slice<T>(this IList<T> source, int begin, int end)
{
return new ListSlice<T>(source, begin, end);
}
static public ISlice<char> Slice(this string source, int begin, int end)
{
return new StringSlice(source, begin, end);
}
还有其他一些因素,例如提供选择性的起始/终端参数,但上述参数足以使我能够这样做。
这些日常工作做得很好,使得收集或展示容易。 我还需要做的是,作为一块阵列、一个名单或一个插图,制作一个斜体。 这样,事情就得到“利益”。 最初,我认为我需要制定ToArray, ToList教推广方法,但后来记住,如果你的收集能够执行<条码>,则准则的变式可发挥最佳作用;T>。 就我而言,ISlice<T>
确实继承了该编码,尽管由于我不喜欢从像Add.这样的方法中 throw弃不支持的疑虑,对我而言很多。 不管怎样,我还是免费。 页: 1
当没有内在支持转换“<代码”时,将背转划为地体有何意义。 缩略语 我发现的最近一点是扼杀。 散射超负荷,但无法像可能那样有效地处理果园。 从设计的角度来看,同样重要的是,它不作为例行的“转变”。
第一个想法是制定一种扩展方法,但随着图谋的形成,这项工作是一种实例方法,这意味着它影响推广方法,永远不会被称作。 我可以推翻《规约》,但行为将不一致,因为<代码>ListSlice<T>将需要对其提出特别案例。 • 积累T果园。 我不喜欢这样说,因为如果平均参数是焦炭的话,那么String会有所助益,但其他情况下的类别名称也会有所助益。 此外,如果在未来的I d中产生其他类型,则必须建立一个共同的基础类别,以确保相同的行为,或者每一类人都必须进行同样的检查。 接口上的延伸方法将更恰当地处理。
延期办法使我产生一个命名公约的问题。 显而易见的是,要利用《商品清单》,但正如前面所述,它不允许。 我可以把它称作什么不同,但什么? 新的结构? 新趋势? 创造环境? 在“前家庭”中,一些方法会使其与ToArray/ToList的例行活动相左,但“新生活”则在电视和编辑中被视而不见。 新的统计/分类并不像你所知道的那样可以发现。 这种方法符合家庭外方法提供的“转化方法”模式。
采取压倒一切的做法,接受难以列入<代码>的不一致的行为。 ListSlice<T> implementation and other implementation? 采用更加灵活但可能更名副其实的推广方法? 是否考虑了第三种选择:
My gut tells me to go with the ToString despite my reservations, though, it also occurred to me... Would you even consider ToString giving you a useful output on a collection/enumerable type? Would that violate the principle of least surprise?
<>Update>
许可操作的大多数实施都提供了从任何来源获得的数据复制件,尽管是分集。 在大多数使用案例中,这完全是可以接受的,因此留下了一种清洁的二字体,因为你只能退回同样的数据类型。 如果你照发一份清单,你将一份清单,其中仅载列文件中规定的范围。 如果你听起来,你会回动。 因此。
上文描述的“Im”号特许行动在遇到使这种行为不受欢迎的限制时,正在解决一个问题。 例如,如果你使用大型数据集,则照相操作将导致不必要的额外记忆分配,更不用提复制数据的业绩影响。 如果在取得最后结果之前,这些专册将进一步处理这些专册,就尤其如此。 因此,切片执行的目标是将
渔获量是,在加工结束时,希望将以斜体为基础的处理数据退回到更多的APIC中。 NET 友好型,如名单、阵列和座标。 这使得数据更容易传送到其他信息预报系统。 这还使你能够丢弃这些遗产,因此,也使大数据集了参考的斜体。