Morpheus_God
@Morpheus_God

Как правильно поступить с классом Random?

Добрый день.
Написал обычный консольный генератор, но столкнулся с такой проблемой, что повторно используя программу, длинна пароля суммируется.
К примеру ввожу длину пароля в два символа, происходит генерация, далее повторив операцию но указав три символа итоговый пароль вырастает до пяти символов, причем два из них используются из прошлого запроса.
Вот исходный код:
using System;

namespace PasswordGenerator
{
    class Program
    {
        static void Main(string[] args)
        {

            string Pass = "";
            string rnd_psw = "1234567890QWERTYUIOPASDFGHJKLMNBVCXZ";
            int pass_lenght;
            Random rnd = new Random();

            Console.WriteLine("\t\t\t\t###Типа дофига крутой генератор паролей!!###");

            while(true)
            {

                Console.Write("Введите длину пароля:");
                pass_lenght = Convert.ToInt32(Console.ReadLine());

                
                for (int i = 0; i < pass_lenght; i++)
                {
                    Pass = Pass + rnd_psw[rnd.Next(0, rnd_psw.Length)];
                }

                Console.WriteLine("Ваш пароль:{0}", Pass);
                Console.WriteLine("Повторить? y/n");
                if (Console.ReadKey(true).Key != ConsoleKey.Y)
                    break;
            }
        }


       
    }
}

Я сделал вот что, после строчки кода:
for (int i = 0; i < pass_lenght; i++)
                {
                    Pass = Pass + rnd_psw[rnd.Next(0, rnd_psw.Length)];
                }
                Console.WriteLine("Ваш пароль:{0}", Pass);

Дописал Pass = null; и получил это:
for (int i = 0; i < pass_lenght; i++)
                {
                    Pass = Pass + rnd_psw[rnd.Next(0, rnd_psw.Length)];
                }
                Console.WriteLine("Ваш пароль:{0}", Pass);
                Pass = null;

Верно ли я сделал или можно иначе поступить?
  • Вопрос задан
  • 135 просмотров
Решения вопроса 1
@Beltoev
Живу в своё удовольствие
Непонятно зачем вам Pass выносить за цикл. К тому же использовать неизменяемый тип string для этой задачи - не лучшее решение.

Стиль именования переменных не критикую (а мог бы!):
var password = new StringBuilder(pass_lenght);

for (int i = 0; i < pass_lenght; i++)
{
    password.Append(rnd_psw[rnd.Next(0, rnd_psw.Length)]);
}

Console.WriteLine("Ваш пароль:{0}", password);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы