public static int GetPrime(int min)
        {
            if (min < 0)
            {
                throw new ArgumentException("Value must be non-negative.");
            }
            for (int index = 0; index < PrimeHelper.primes.Length; ++index)
            {
                int num = PrimeHelper.primes[index];
                if (num >= min)
                {
                    return(num);
                }
            }
            int candidate = min | 1;

            while (candidate < int.MaxValue)
            {
                if (PrimeHelper.IsPrime(candidate) && (candidate - 1) % 101 != 0)
                {
                    return(candidate);
                }
                candidate += 2;
            }
            return(min);
        }
        public static int ExpandPrime(int oldSize)
        {
            int min = 2 * oldSize;

            if ((uint)min > 2146435069U && 2146435069 > oldSize)
            {
                return(2146435069);
            }
            else
            {
                return(PrimeHelper.GetPrime(min));
            }
        }
        private void Init(int size)
        {
            if (size < 0)
                throw new ArgumentOutOfRangeException("capacity");
            else if (size == 0)
                size = 5; //set nominal start size
            size = PrimeHelper.GetPrime(size);

            _table = new int[size];
            _links = new Link[size];
            _empty_slot = -1;
            _slots = new T[size];
            _touched = 0;
            _threshold = (int)((double)_table.Length * 0.899999976158142);
            if (_threshold != 0 || _table.Length <= 0)
                return;
            _threshold = 1;
            _generation = 0;
        }
 private void Resize()
 {
     int length = PrimeHelper.ExpandPrime(_table.Length);
     int[] numArray = new int[length];
     Link[] linkArray = new Link[length];
     for (int index1 = 0; index1 < _table.Length; ++index1)
     {
         for (int index2 = _table[index1] - 1; index2 != -1; index2 = _links[index2].Next)
         {
             int index3 = ((linkArray[index2].HashCode = _comparer.GetHashCode(_slots[index2])) & int.MaxValue) % length;
             linkArray[index2].Next = numArray[index3] - 1;
             numArray[index3] = index2 + 1;
         }
     }
     _table = numArray;
     _links = linkArray;
     T[] objArray = new T[length];
     Array.Copy((Array)_slots, 0, (Array)objArray, 0, _touched);
     _slots = objArray;
     _threshold = (int)((double)length * 0.899999976158142);
 }