密码生成器程序。有一个选择——添加密码символами。我创建了一个将数据写入自身的变量,textBox2.Text然后在循环中执行生成。但是会发生错误Ошибка CS0029 Не удается неявно преобразовать тип "char" в "string".。
我尝试将char输入数据转换为变量,但没有帮助。告诉我如何正确地做。
我也想混合这两个结果(这样它们混合起来,输出密码更可靠),告诉我如何实现它。
编码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string data = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
char symbols = Convert.ToChar(textBox2.Text);
int lon = (int)numericUpDown1.Value;
string result = "";
string result_symbols = "";
Random rnd = new Random();
int lng = data.Length;
int lng2 = data.Length;
for (int i = 0; i < lon; i++)
{
result_symbols = Convert.ToChar(symbols[rnd.Next(lng)]);
result += data[rnd.Next(lng)];
}
textBox1.Text = result;
}
}
程序截图:

这是一个简单的实现。仅将常量初始化一次作为常量或类变量。将实用程序功能与 UI 代码分开。
这里有一个更正确的代码,有问题就写
假设您有一个字符串列表,每个字符串代表一个特定范围。创建一个控制台应用程序来测试我将展示的代码是如何工作的,然后才将其传输到您的项目中。
但首先,让我们创建一个从所需长度的所需字符生成字符串的方法。始终将您的任务分解为方法,因此使用代码会更容易。
要了解如何以这种方式组成字符范围 - 查看 ASCII 字符表,您会立即清楚英文字母和数字是按顺序排列的。对俄罗斯人来说更困难,那里并不是一切都井井有条,但你似乎不需要他们。对于俄罗斯人,C# 使用 UTF-16 (Unicode) 编码。
接下来,您可以开始从所需的字符集编译字典。
如您所见,您可以简单地将包含任何内容的行添加到列表中。我建议使用该列表,以便您只需
if在代码中添加一些复选框即可通过界面中的复选框和设置来控制字典的内容。现在我们需要从中组成一串唯一字符。
(对于有经验的人:是的,Linq 在这里也很好用
SelectMany)完成,输出到控制台
Distinct()只是从字符串中删除重复的字符。现在使用这本字典作为所需长度的密码
这就是所有的解决方案。当然,我经常使用 Linq,但同样可以用像你这样的简单循环来完成。这个答案的重点只是展示如何自己从多个集合中创建一个字符字典。
顺便说一句,要在循环中遍历字符串,不需要将其转换为字符数组,因为字符串是字符数组,并且可以通过索引以相同的方式访问这些字符,如一个常规字符数组。唯一的区别是您将无法覆盖字符串中的字符,而只能读取。
控制台输出
所有可玩的代码