我特别考虑的是履行一套合同的集合,但我认为这个问题可以适用于任何类型。 .NET 框架中是否存在可以防止空条目的集合?我想要的具体行为是这样的:
var set = new HashSet<object>();
bool added = set.Add(null);
Console.WriteLine(added); // prints "False"
这不是内置的行为HashSet<T>
。是否有任何集合确实有这种(或类似)行为,或者我最好自己推出?如果是后者,最好的方法是什么?我应该直接继承自HashSet<T>
或者只是包裹它?
编辑:要明确的是,这只是闲想。主要是因为我想不出任何理由want允许null
成一组对象。我对此没有任何特别的需求。
没有像这样的内置类HashSet<T>
除了这个单一的行为。
如果您需要这个,我建议您自己滚动。我不建议子类化HashSet<T>
, 然而。没有任何方法(例如Add
,您明确想要更改的)是虚拟的,因为它在设计时并没有真正考虑到子类化。这将导致奇怪的使用行为,因为您将隐藏继承的方法。
只需封装一个HashSet<T>
,并公开您需要的成员。您必须添加的唯一真正的“代码”是对 Add 方法的单个空检查 - 否则,只需将所有方法传递到封装的实例即可。
如果您希望这是一个泛型类,则需要添加一个额外的约束以仅适用于类,因为您希望进行空检查:
public class ValueSet<T> : ICollection<T>, IEnumerable<T>, ICollection
where T : class
{
private HashSet<T> hashSet = new HashSet<T>();
// ... Implement all members as needed...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)