public Hashtable(int capacity, float loadFactor)
{
if (capacity < 0)
{
throw new ArgumentOutOfRangeException("capacity", "NeedNonNegNum");
}
if (!(loadFactor >= 0.1f && loadFactor <= 1.0f))
{
throw new ArgumentOutOfRangeException("loadFactor", "HashtableLoadFactor");
}
this.loadFactor = 0.72f * loadFactor;
double rawsize = capacity / this.loadFactor;
if (rawsize > Int32.MaxValue)
{
throw new ArgumentException("HTCapacityOverflow");
}
int hashsize = (rawsize > InitialSize) ? HashHelpers.GetPrime((int)rawsize) : InitialSize;
buckets = new bucket[hashsize];
loadsize = (int)(this.loadFactor * hashsize);
isWriterInProgress = false;
}