在Main方法中实现Set <t>类

时间:2018-08-28 09:16:48

标签: c#

当前,我正在学习散列及其目的,并获得了这段代码,以便我可以了解存储桶的方式以及散列的发生方式。唯一的问题是,这本书将编码放在Set<T>类中,而没有告诉我如何在Main()中实现它!

这是给定的代码

class Set<T>
{
    private List<T>[] buckets = new List<T>[100];

    public void Insert(T item)
    {
        int bucket = GetBucket(item.GetHashCode());
        if (Contains(item, bucket))
        {
            return;
        }

        if (buckets[bucket] == null)
        {
            buckets[bucket] = new List<T>();
        }

        buckets[bucket].Add(item);

    }

    public bool Contains(T item)
    {
        return Contains(item, GetBucket(item.GetHashCode()));
    }

    private int GetBucket(int hashcode)
    {
        unchecked
        {
             return (int)((uint)hashcode%(uint)buckets.Length);
        }
    }

    private bool Contains(T item, int bucket)
    {
        if (buckets[bucket] != null)
        {
            foreach (T member in buckets[bucket])
            {
                if (member.Equals(item))
                {
                    return true;
                }
            }
        }
        return false;
    }

我知道如何创建类的普通实例:

 MyClass objectname = new MyClass();

但是当我尝试创建Set<T>类的实例(顺便说一句,我知道它的泛型)时,编译器会说T不存在。

究竟如何从Set<T>访问Main()

1 个答案:

答案 0 :(得分:0)

您的问题实际上来自对C#中泛型的理解。

一个通用类用于处理我们不知道但可以操纵的数据。

以一个列表为例。您可以操纵字符串,整数,双精度数,浮点数的列表...这就是List<T>类已在.Net Framework中实现的原因。关键是用计划在运行时使用的类型替换T。

因此,如果我知道要使用整数列表,我将使用List<int>

与您的Set<T>类相同。 T代表“您想要的任何类型”。

因此,如果要使用它,则必须这样做:

Set<int> MySetOfInteger = new Set<int>();
Set<String> MySetOfStrings = new Set<String>();

这实际上会生成两个不同的类,但是基于相同的模板。

希望它能澄清一点。