C# 从文本文件生成随机问题-C

C# 从文本文件生成随机问题-C,c#,string,random,C#,String,Random,我想为用户提供一系列问题,但我希望它们是随机的,用同样的问题做一个问答游戏并不是很有趣 我的想法是将大量问题和适当答案存储在一个文本文件中: What colour is an Strawberry|Red How many corners are there on a Triangle|Three 这意味着我可以简单地随机选择一行,从行中读取问题和答案,并将它们存储在一个集合中,以便在游戏中使用 我已经提出了一些伪代码,我认为这是一种有用的方法,我正在寻找一些关于如何改进它的输入: Rand

我想为用户提供一系列问题,但我希望它们是随机的,用同样的问题做一个问答游戏并不是很有趣

我的想法是将大量问题和适当答案存储在一个文本文件中:

What colour is an Strawberry|Red
How many corners are there on a Triangle|Three
这意味着我可以简单地随机选择一行,从行中读取问题和答案,并将它们存储在一个集合中,以便在游戏中使用

我已经提出了一些伪代码,我认为这是一种有用的方法,我正在寻找一些关于如何改进它的输入:

Random rand = new Random();
int line;
string question,answer;

for(int i = 0; i < 20; i++)
{
   line = rand.Next();
   //Read question at given line number to string
   //Read answer at given line number to string
   //Copy question and answer to collection
}

谢谢你的帮助

为什么不使用将整个文件读入数组或列表,然后引用数组边界内的随机索引来提取问题/答案字符串,而不是在需要问题时从文本文件中读取


至于解析它,只需使用在|描绘器处拆分它,并确保问题中没有因为某种原因而带有|的问题。这也会让你存储一些错误的答案,只要说第一个答案总是正确的,那么当你输出它时,你就可以随机化顺序。

你不想把任何问题显示两次,对吗

Random random = new Random();
var q = File.ReadAllLines("questions.txt")
    .OrderBy(x=>random.Next())
    .Take(20)
    .Select(x=>x.Split('|'))
    .Select(x=>new QuestionAndAnswer(){Question=x[0],Answer=x[1]});

这很好,假设文件不是很大,可能就是这样。你介意解释一下上面的代码是如何工作的吗?我有一种感觉,我理解它,但我只是想确定一下。这段代码很可爱,但对于每一秒用来产生它的认真的脑力劳动来说,每次你试图阅读它时,你至少需要一秒钟来理解它。也许更多,这是大多数人不习惯林克时说的话。然后你习惯了操作符是什么,然后3行LINQ变得比3行C更可读,更不用说30行等效的C了。我同意,尽管我确实认为当你将它们作为LINQ查询来编写时,它们更可读。我建议不要对结构化数据使用纯文本文件,数据结构一开始可能是多么简单。从长远来看,XML文件应该能更好地为您服务。3 |这个字符“|”用于什么?| Pipe命令。@GCATNM或类似CompactSQL的进程内数据库。这为您提供了一种简单的方法,只获取您想向用户显示的行。好主意!也就是说,如果我在一行中添加新项目,我可以扩展它。
Random random = new Random();
var q = File.ReadAllLines("questions.txt")
    .OrderBy(x=>random.Next())
    .Take(20)
    .Select(x=>x.Split('|'))
    .Select(x=>new QuestionAndAnswer(){Question=x[0],Answer=x[1]});