返回随机字母表的扩展方法

时间:2009-12-02 06:49:05

标签: c# extension-methods

如何开发一个可以从字母表(a,b,...... z)返回随机字符(单个字符)的扩展方法。

public static char RandomLetter(this char randomchar)
{

}

4 个答案:

答案 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)];

应该做的。