static Random random = new Random();
public static IEnumerable<T> RandomPermutation<T>(IEnumerable<T> sequence)
{
T[] retArray = sequence.ToArray();
for (int i = 0; i < retArray.Length - 1; i += 1)
{
int swapIndex = random.Next(i, retArray.Length);
if (swapIndex != i) {
T temp = retArray[i];
retArray[i] = retArray[swapIndex];
retArray[swapIndex] = temp;
}
}
return retArray;
}
измененный для обработки списков или других объектов, реализовывая IEnumerable
Я настоятельно рекомендую использовать существующие методы (например, те, которые вы упомянули), потому что они поддерживаются и поддерживаются Microsoft и будут продолжать работать с будущими выпусками.
Быстрый просмотр gacutil.exe
с Process Monitor показывает, что это немного больше, чем просто копирование файлов:
] WINDOWS \ assembly \ GACLock.dat
и т. Д.) HKLM \ SOFTWARE \ Microsoft \ Fusion \ GACChangeNotification \ ...
) HKLM \ SOFTWARE \ Microsoft \ Fusion \ NativeImagesIndex ...
) Оболочка в System.EnterpriseServices
очень похож на этот старый пост в блоге и должен работать нормально.
Недавно нам пришлось сделать это для десятков серверов в корпоративной среде. Мы использовали Wix для создания очень простого MSI (серьезно - 5 минут работы) и опубликовали его для всех серверов (и разработчиков) через групповую политику.