C# 显示.txt文件-c中的随机行#

C# 显示.txt文件-c中的随机行#,c#,winforms,C#,Winforms,我正试图用c#(winforms)做一些事情,但我遇到了一个小问题。我尝试了所有与此问题相关的代码,但没有成功。回答问题前请先阅读问题 我有两个功能。我想做一个函数,它将从特定的.txt文件中获得一个随机行,并将其放入另一个文件中 以下是一个例子: //This is a ContexMenuStrip, a right click menu item that need to load Function1 (check the picture below private void pdkNa

我正试图用c#(winforms)做一些事情,但我遇到了一个小问题。我尝试了所有与此问题相关的代码,但没有成功。回答问题前请先阅读问题

我有两个功能。我想做一个函数,它将从特定的.txt文件中获得一个随机行,并将其放入另一个文件中

以下是一个例子:

//This is a ContexMenuStrip, a right click menu item that need to load Function1 (check the picture below

private void pdkName_Click(object sender, EventArgs e)
{
    Function1();
}

private void Function1()
{
      //CODE to Count and Display random line from .txt file
}
到目前为止,我已经尝试了许多以前在stackoverflow.com上发布的代码,我也尝试了大量的组合。我将在此处粘贴其中一些:



//这只适用于第一行,不能与它进行任何组合(通过其他函数使其随机)




函数需要对文件进行计数,随机选取一行并返回。ContexMenuStrip中调用函数的项菜单用于文本框

因此,一般来说,我需要从.txt文件中随机取一个名称,然后在文本框中单击鼠标右键并选择加载我的函数的项,显示在文本框中。这里有一个简单的解释小图片


在您的表单中将您的random定义为私人会员:

private _rand = new Random();
然后在ContextMenuStrip中的事件中,粘贴此代码(确保编辑文件名“yourFile.txt”):


将您的random定义为表单中的私人成员:

private _rand = new Random();
然后在ContextMenuStrip中的事件中,粘贴此代码(确保编辑文件名“yourFile.txt”):


如fabian所说,或在方括号内声明random,然后直接调用该方法

string[] lines = File.ReadAllLines(@"C:\...\....\YourFile.txt");

textBox1.Text = lines[new Random().Next(lines.Length)];

如fabian所说,或在方括号内声明random,然后直接调用该方法

string[] lines = File.ReadAllLines(@"C:\...\....\YourFile.txt");

textBox1.Text = lines[new Random().Next(lines.Length)];

使用
FileReadLines
的第一种方法失败,因为它在内部使用
TextReader
,在执行查询时立即进行处理。这发生在
行.Count()
,因此下一次访问会抛出一个
ObjectDisposedException
。我不太理解您的问题。您是否希望从文本文件中随机获取一行,而不重复?我的意思是,假设文本文件有4行:
第1行、第2行、第3行、第4行
,第一次随机得到一行,即
第2行
,第二次可能得到相同的行
第2行
?等等…没关系,这个.txt文件是一个巨大的名字库。假设它有1000个名称,那么每次调用函数时,代码都需要选择一个随机名称。如果只有1000个名称,那么最好在开始时将其加载到内存中,而不是在每次需要显示名称时打开文件并再次搜索。或者至少在beining计算行数,以便有随机生成的边界。只是为了完整性。我的解决方案也适用于您吗?使用
FileReadLines
的第一种方法失败,因为它在内部使用
TextReader
,在您执行查询时立即进行处理。这发生在
行.Count()
,因此下一次访问会抛出一个
ObjectDisposedException
。我不太理解您的问题。您是否希望从文本文件中随机获取一行,而不重复?我的意思是,假设文本文件有4行:
第1行、第2行、第3行、第4行
,第一次随机得到一行,即
第2行
,第二次可能得到相同的行
第2行
?等等…没关系,这个.txt文件是一个巨大的名字库。假设它有1000个名称,那么每次调用函数时,代码都需要选择一个随机名称。如果只有1000个名称,那么最好在开始时将其加载到内存中,而不是在每次需要显示名称时打开文件并再次搜索。或者至少在beining计算行数,以便有随机生成的边界。只是为了完整性。我的解决方案对你也有效吗?
Random的上限。Next
是独占的,
0
是隐式的。这很有效,谢谢大家,尤其是terrybozzio!
Random.Next
的上限是独占的,
0
是隐式的。这很好,感谢大家,尤其是terrybozzio!
Random.Next
的上限是独占的,
0
是隐式的。
Random.Next
的上限是独占的,
0
是隐式的。
string[] lines = File.ReadAllLines(@"D:\FirstNames.txt"); 
Random rand = new Random();
return lines[rand.Next(lines.Length)];
private _rand = new Random();
var lines = File.ReadAllLines(@"D:\FirstNames.txt");
var randomLineNumber = _rand.Next(0, lines.Length - 1);
var line = lines[randomLineNumber]; //getting the random line
using (StreamWriter sw= File.AppendText("yourFile.txt")) 
{
     sw.WriteLine(line); //append the random line in your file
}
string[] lines = File.ReadAllLines(@"C:\...\....\YourFile.txt");

textBox1.Text = lines[new Random().Next(lines.Length)];