Как Greg указал , перестановка Фишера-Йетса будет лучшим подходом. Вот реализация алгоритма из Википедии:
public static void shuffle (int[] array)
{
Random rng = new Random(); // i.e., java.util.Random.
int n = array.length; // The number of items left to shuffle (loop invariant).
while (n > 1)
{
int k = rng.nextInt(n); // 0 <= k < n.
n--; // n is now the last pertinent index;
int temp = array[n]; // swap array[n] with array[k] (does nothing if k == n).
array[n] = array[k];
array[k] = temp;
}
}
реализация выше полагается на Random.nextInt (интервал), обеспечивающий достаточно случайные и несмещенные результаты
Есть несколько способов:
Application.ExecutablePath
или
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
или
System.Reflection.Assembly.GetExecutingAssembly().Location
На этот вопрос ответили до .
Из любого места вашего кода вы можете находиться в сборке, загруженной исходным EXE. У вас также может не быть ссылки на синглтон Application, поэтому лучше всего использовать класс Assembly.
Самый безопасный способ - Assembly.GetEntryAssembly () . Местоположение получает местоположение в файловой системе, где находится сборка. В настоящее время. Если это теневое копирование , то это местоположение теневой копии. Если он развертывается в один клик, то это безумный путь к файлу в области песочницы .
Исходное расположение сборки будет в Assembly.GetEntryAssembly (). Codebase
Вы должны найти его в свойстве: Application.ExecutablePath
Process.GetCurrentProcess (). MainModule
edit
Другой способ - использовать Environment.GetCommandLineArgs () [0], но я предпочитаю использовать Процесс.