如何开发一个可以从字母表(a,b,...... z)返回随机字符(单个字符)的扩展方法。
public static char RandomLetter(this char randomchar)
{
}
答案 0 :(得分:8)
扩展方法在这里是错误的工具,因为字母表中的随机字母与输入字母无关(或者我在这里遗漏了什么?)。
static string alphabet = "QWERTYUIOPASDFGHJKLZXCVBNM";
static Random = new Random();
public static char RandomLetter()
{
return alphabet[random.Next(alphabet.Length)];
}
编辑(回复评论):
您可以将其变为Random
类型的扩展方法:
public static char NextRandomLetter(this Random random)
{
return alphabet[random.Next(alphabet.Length)];
}
(我选择不称它为NextLetterOfTheAlphabet
,因为它显然应该是随机的)
可以通过同步实现这些方法的类的私有变量来添加线程安全性。但是我认为整个锁定过程比抽取一个随机数更多的CPU负担:
public static char SynchronizedRandomLetter()
{
lock (random) // Although the lock is not random ;)
{
return alphabet[random.Next(alphabet.Length)];
}
}
答案 1 :(得分:1)
您可以利用字节代码进行字符代码转换,并使用简单的:
random.Next(0,27)给你下一个随机字符(将它与a&转换为char的字节值相加)。
答案 2 :(得分:1)
将它作为char的扩展方法没有意义,因为您不使用char作为输入。你宁愿把它变成一个静态的方法。
您可以为String添加一个扩展方法,用于选择字符串中的一个字符:
public static Extensions {
public static char PickOneChar(this string chars, Random rnd) {
return chars[rnd.Next(chars.Length)];
}
public static char PickOneChar(this string chars) {
return chars.PickOneChar(new Random())
}
}
(注意带有Random对象的重载;如果你重复这样做,你应该创建一个Random对象并将其传递给方法。创建几个随机对象及时关闭会一遍又一遍地给出相同的随机序列。)< / p>
示例:
char[] pass = new char[8];
Random rnd = new Random();
for (int i = 0; i < pass.Length; i++) {
pass[i] = "23456789BCDEFGHJKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz".PickOneChar(rnd)
}
string password = new String(pass);
答案 3 :(得分:0)
String[] letters = {"a",.....,"z"};
Random rand = new Random();
String letter = letters[rand.Next(0,letters.Length-1)];
应该做的。