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]; } } }
浙公网安备 33010602011771号