【发布时间】:2016-04-20 08:13:44
【问题描述】:
我有一个 C# 中的随机密钥生成器,它应该生成以下格式的密钥:
辅音+元音+辅音+元音+四位数字
例如,它将是 BABA1234 或 ZUZU9876。
然而,目前元音不显示,尽管其他所有内容都会显示,所以我最终会得到像 B_B_1234 这样的输出,例如,下划线表示空格或无法识别的字符框。
我一直在查看一些示例,例如 this、this 和 this,但我仍然没有让它工作。 C#代码如下:
public static string shortText()
{
string randomNumber = new Random().Next(1000, 9999).ToString();
char c1 = consonant();
char c2 = vowel();
System.Threading.Thread.Sleep(400);
char c3 = consonant();
char c4 = vowel();
return string.Format("{0}{1}{2}{3}{4}", c1, c2, c3, c4, randomNumber);
}
private static char vowel()
{
int selected = new Random().Next(0, 4);
List<int> list = new List<int> { 65, 69, 73, 79, 85 };
return Strings.Chr(selected);
}
private static char consonant()
{
int selected = new Random().Next(65, 90);
List<int> list = new List<int> { 65, 69, 73, 79, 85 };
if (list.Contains(selected) == false)
{
return Strings.Chr(selected);
}
else {
return Strings.Chr(selected + 1);
}
}
另外说明的是,这段代码最初是用VB编写的(这就是为什么上面的C#代码中有一个Strings.Chr,我添加了对VB库的引用),它可以正常工作并根据开头的格式。我将它转换为 C# 并稍微编辑它以消除错误,但看起来转换并不完美。这是VB代码:
Public Class Form1
Private Sub btnGenerateKey_Click(sender As Object, e As EventArgs) Handles btnGenerateKey.Click
txtKey.Text = shortText()
End Sub
Private Shared Function shortText() As String
Dim randomNumber As String = New Random().Next(1000, 9999).ToString
Dim c1 As Char = consonant()
Dim c2 As Char = vowel()
System.Threading.Thread.Sleep(400)
Dim c3 As Char = consonant()
Dim c4 As Char = vowel()
Return String.Format("{0}{1}{2}{3}{4}", c1, c2, c3, c4, randomNumber)
End Function
Private Shared Function vowel() As Char
Dim list As List(Of Integer) = New List(Of Integer)({65, 69, 73, 79, 85})
Return Chr(list(New Random().Next(0, 4)))
End Function
Private Shared Function consonant() As Char
Dim selected As Integer = New Random().Next(65, 90)
Dim list As List(Of Integer) = New List(Of Integer)({65, 69, 73, 79, 85})
If list.Contains(selected) = False Then
Return Chr(selected)
Else
Return Chr(selected + 1)
End If
End Function
End Class
非常感谢任何帮助。
【问题讨论】: