Leia a linha aleatória de um arquivo? c #

Eu tenho um arquivo de texto com poucas centenas de linhas, a estrutura é bem simples.

primeiro nome, ultimo nome

Eu preciso escolher um nome random & listname do arquivo.

string[] lines = File.ReadAllLines(...); //i hope that the file is not too big Random rand = new Random(); return lines[rand.Next(lines.Length)]; 

Outra opção (e talvez melhor) é fazer com que a primeira linha do arquivo contenha o número de registros e, portanto, não seja necessário ler todo o arquivo.

Leia cada linha mantendo uma contagem, N, das linhas que você viu até agora. Selecione cada linha com probabilidade 1 / N, ou seja, a primeira linha será sempre escolhida, a segunda linha será escolhida 1/2 vezes para replace a primeira, a terceira 1/3 vezes, … Desta forma cada linha tem um 1 / N probabilidade de ser a linha selecionada, você só tem que ler o arquivo uma vez, e você não precisa armazenar todo o arquivo na memory a qualquer momento.

Aqui está uma implementação que pode ser adaptada às suas necessidades.

 public string RandomLine( StreamReader reader ) { string chosen = null; int numberSeen = 0; var rng = new Random(); while ((string line = reader.ReadLine()) != null) { if (rng.NextInt(++numberSeen) == 0) { chosen = line; } } return chosen; } 

Baseado em uma implementação C para selecionar um nó de uma linked list longa e arbitrariamente.