2010-09-03 2 views
1

this code fait partie de NBuilder. Je passe une mauvaise journée ... et pour le prouver, je ne comprends pas ce que ce code (simple) essaie de faire.Comment fonctionne ce code .NET?

Voici les réponses, avec le code après.

GetRandom.Phrase(5) == null or et or ut or do or elit or amet.. 
         (nothing over 4 characters) 
GetRandom.Phrase(4) == null or sit or sed or do .. 
         (nothing over 3 characters) 
GetRandom.Phrase(3) == null or et or ut or do (nothing over 2 characters) 
GetRandom.Phrase(2) == null 
GetRandom.Phrase(1) == null 

et le code ...

private static readonly string[] latinWords = { "lorem", "ipsum", "dolor", 
    "sit", "amet", "consectetur", "adipisicing", "elit", "sed", "do", 
    "eiusmod", "tempor", "incididunt", "ut", "labore", "et", "dolore", 
    "magna", "aliqua" }; 

public virtual string Phrase(int length) 
{ 
    var count = latinWords.Length; 
    var result = string.Empty; 
    var done = false; 
    while (!done) 
    { 
     var word = latinWords[Next(0, count - 1)]; 
     if (result.Length + word.Length + 1 > length) 
     { 
      done = true; 
     } 
     else 
     { 
      result += word + " "; 
     } 
    } 
    return result.Trim(); 
} 

j'aurais pensé que la méthode doit renvoyer un nombre x de phrases ou une expression aléatoire d'au moins la longueur spécifiée?

Répondre

3

Le code renvoie une expression aléatoire inférieure ou égale à la longueur spécifiée, en caractères. La clé est cette ligne:

if (result.Length + word.Length + 1 > length) 

Cela garantit qui ne dépasse pas la valeur de length la longueur en caractères du résultat (y compris le mot nouvellement ajoutée).

+0

donc si j'ai passé le nombre '50' ... cela continuerait-il à ajouter des phrases jusqu'à ce qu'il essaie d'ajouter une phrase qui DÉPASSE 50, puis s'arrête? –

+0

Je ne vois pas où le hasard vient jouer. – griegs

+0

@ Pure.Krome, il continuerait à ajouter des * mots * jusqu'à ce que le * mot * suivant * fasse que la * phrase * dépasse la longueur spécifiée. À ce stade, la seule * phrase * est renvoyée. –