c#范型参数笔记

这个例子是我曾经的面试题,稍微根据记忆修改了下。

希望以后我别再忘记了。。。以下以自己实现字典类为例子,可以有不对望看到的大佬指出

public class Dic<T1, T2>
{
    T1[] keyArr;
    T2[] valueArr;
    public Dic()
    {
        keyArr = new T1[10];
        valueArr = new T2[10];
    }

    
    public int Count
    {
        get
        {
            int count = 0;
            for (int i = 0; i < keyArr.Length; i++)
            {
                if (keyArr[i] == null)
                {
                    break;
                }
                count++;
            }
            return count;
        }
    }

    //范型方法
    public void Add(T1 key, T2 value)
    {
        PlusArrLength(keyArr, key);
        PlusArrLength(valueArr, value);
    }

  //删除元素
public void Remove(T1 key) { for (int i = 0; i < keyArr.Length; i++) { if (keyArr[i].Equals(key)) { keyArr[i] = default(T1); valueArr[i] = default(T2); break; } } }
  //通过索引获取元素
public T2 this[T1 key] { get { for (int i = 0; i < keyArr.Length; i++) { if (keyArr[i].Equals(key)) { return valueArr[i]; } } return default(T2); } } /// <summary> /// 添加数组长度 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="arr"></param> private void PlusArrLength<T>(T[] arr, T add) { for (int i = 0; i < arr.Length; i++) { if (arr[i] != null && i == arr.Length - 1)//到元素最后一个位置,说明元素位置不够了,需要扩充 { T[] temp = arr; arr = new T[arr.Length + 10]; MoveUnitToAnother(temp, arr); arr[i + 1] = add; } else if (arr[i] == null)//正常添加 { arr[i] = add; break; } } } private void MoveUnitToAnother<T>(T[] srcArr, T[] dstArr) { for (int i = 0; i < srcArr.Length; i++) { dstArr[i] = srcArr[i]; } } }

 

posted on 2019-07-18 09:50  炼金师  阅读(107)  评论(0)    收藏  举报

导航