▁list , ▁reducing ▁performance ▁compared ▁to ▁other ▁implementations ▁such ▁as ▁C ++ ▁templates . ▁ ▁Gener icity ▁in ▁. NET ▁[ C #, ▁VB . NET ] ▁ ▁Gener ics ▁were ▁added ▁as ▁part ▁of ▁. NET ▁Framework ▁ 2 . 0 ▁in ▁November ▁ 2 0 0 5 , ▁based ▁on ▁a ▁research ▁prototype ▁from ▁Microsoft ▁Research ▁started ▁in ▁ 1 9 9 9 . ▁Although ▁similar ▁to ▁gener ics ▁in ▁Java , ▁. NET ▁gener ics ▁do ▁not ▁apply ▁type ▁er asure , ▁but ▁implement ▁gener ics ▁as ▁a ▁first ▁class ▁mechanism ▁in ▁the ▁runtime ▁using ▁re ification . ▁This ▁design ▁choice ▁provides ▁additional ▁functionality , ▁such ▁as ▁allowing ▁reflection ▁with ▁pres ervation ▁of ▁generic ▁types , ▁as ▁well ▁as ▁alle vi ating ▁some ▁of ▁the ▁limitations ▁of ▁er asure ▁( such ▁as ▁being ▁unable ▁to ▁create ▁generic ▁arrays ). ▁This ▁also ▁means ▁that ▁there ▁is ▁no ▁performance ▁hit ▁from ▁runtime ▁cast s ▁and ▁normally ▁expensive ▁box ing ▁convers ions . ▁When ▁primitive ▁and ▁value ▁types ▁are ▁used ▁as ▁generic ▁arguments , ▁they ▁get ▁special ized ▁implementations , ▁allowing ▁for ▁efficient ▁generic ▁collections ▁and ▁methods . ▁As ▁in ▁C ++ ▁and ▁Java , ▁nested ▁generic ▁types ▁such ▁as ▁Dictionary < string , ▁List < int >> ▁are ▁valid ▁types , ▁however ▁are ▁ad vised ▁against ▁for ▁member ▁sign atures ▁in ▁code ▁analysis ▁design ▁rules . ▁ ▁. NET ▁allows ▁six ▁vari eties ▁of ▁generic ▁type ▁constraints ▁using ▁the ▁where ▁keyword ▁including ▁restrict ing ▁generic ▁types ▁to ▁be ▁value ▁types , ▁to