2009-12-02 3 views

Répondre

8

Une méthode d'extension est le mauvais outil ici, car une lettre aléatoire de l'alphabet n'est pas liée à une lettre d'entrée (ou ai-je oublié quelque chose ici?).

static string alphabet = "QWERTYUIOPASDFGHJKLZXCVBNM"; 
static Random = new Random(); 

public static char RandomLetter() 
{ 
    return alphabet[random.Next(alphabet.Length)]; 
} 

Modifier (en réponse aux commentaires):

Vous pouvez en faire une méthode d'extension du type Random:

public static char NextRandomLetter(this Random random) 
{ 
    return alphabet[random.Next(alphabet.Length)]; 
} 

(je choisi de ne pas l'appeler NextLetterOfTheAlphabet car il doit évidemment être aléatoire)

La sécurité des threads pourrait être ajoutée en synchronisant sur une variable privée de la classe qui implémente cette méthode. Cependant, je pense que l'ensemble du processus de verrouillage est plus taxage CPU que tirant sur un nombre aléatoire:

public static char SynchronizedRandomLetter() 
{ 
    lock (random) // Although the lock is not random ;) 
    { 
     return alphabet[random.Next(alphabet.Length)]; 
    } 
} 
+0

pouvez ajouter une certaine sécurité de fil, mais regarde à peu près juste autrement. –

+0

Cela pourrait être déclaré comme une méthode d'extension 'NextLetterOfTheAlphabet' sur' System.Random' si vous le vouliez vraiment, même si je suis assez sûr que ce n'est pas ce que l'OP voulait dire. – LukeH

1

vous pouvez bénéficier d'un code octet char conversion, et d'utiliser un simple:

random.Next (0.27) pour donner u le caractère suivant aléatoire (somme avec la valeur d'octet de un & convertir en char).

0
String[] letters = {"a",.....,"z"}; 
Random rand = new Random(); 
String letter = letters[rand.Next(0,letters.Length-1)]; 

devrait faire le travail.

1

Il ne fait pas vraiment de sens pour en faire une méthode d'extension de char, que vous n'utilisez un char comme contribution. Vous préférez en faire une méthode statique.

Vous pouvez faire une méthode d'extension de chaîne qui prend l'un des personnages de la chaîne:

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()) 
    } 

} 

(Notez la surcharge qui prend un objet au hasard, si vous le faites à plusieurs reprises, vous devez créer un objet aléatoire et le transmettre dans la méthode Création de plusieurs objets aléatoires proches dans le temps vous donne la même séquence aléatoire sur et plus)

Exemple:..

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); 
Questions connexes