将对象添加到Collection <t>时,如何检查对象的类型?

时间:2016-02-26 02:27:39

标签: c# collections

我有一个关于从继承的类向Collection<T>添加对象的问题。

以下是一些示例基类代码:

public virtual Collection<CustomProperty> customProperties
{
    get
    {
        return _customProperties;
    }
    set
    {
        _customProperties = value;
    }
}

以下是一些示例继承的类代码:

public override Collection<CustomProperty> customProperties
{
    get
    {
        return base.customProperties;
    }
    set
    {
        base.customProperties = value;
    }
}

在上面的代码中,当添加从CustomProperty继承的对象时,检查对象是否属于某种类型的最佳方法是什么,然后如果对象属于某种类型则调用函数?

我可以编写一个继承自Collection<CustomProperty>的函数并覆盖protected virtual void InsertItem(int index, T item)函数,但想知道是否有其他方法。

1 个答案:

答案 0 :(得分:1)

Collection<T>List<T>周围的可扩展包装器。继承它并覆盖InsertItem是控制这种事情的确切方法。

你有什么理由需要另一种方式吗?

这是我在工具箱中多次使用过的小帮手。

class FilteringCollection<T> : Collection<T>
{
    private readonly Func<T, bool> Filter;
    FilteringCollection(Func<T, bool> filter)
    {
        Filter = filter;
    }

    protected override InsertItem(int index, T item)
    {
        if(Filter(item))
             base.InsertItem(index, item);
        else
           ;//either ignore or throw an exception here
    }
}

//Or perhaps
class TypeSensitiveCollection<T, TSpecial> : Collection<T>
    where TSpecial : T
{
    public event EventHandler<TSpecial> SpecialMemberAdded;

    TypeSensitiveCollection()
    {

    }

    protected override InsertItem(int index, T item)
    {
        if(item is TSpecial)
        {
             if(SpecialMemberAdded != null)
                 SpecialMemberAdded(this, item as TSpecial)
        }
        base.InsertItem(index, item);
    }
}