【发布时间】:2014-02-07 01:50:04
【问题描述】:
我从数据库中将一些字符串添加到列表中,我随机字符串顺序并显示它,但我不希望随机字符串再次出现,所以我做了一个 remove(string) 但它不起作用。
所以我声明了一个这样的列表字符串:
List<string> questionNo = new List<string>();
这是我在 PageLoad(!Page.IsPostBack 之外) 上输入的代码:
protected void RandomMCQ1()
{
Random r = new Random();
int index = r.Next(questionNo.Count());
randomString = questionNo[index]; // Random a string from list ( I declare randomString as a string in global)
questionNo.Remove(randomString); // Then remove it
}
所以我想在点击按钮后显示 randomString 来测试它:
protected void btnNext_Click(object sender, EventArgs e)
{
Response.Write(questionNo.Count); // Display list<string> count
Response.Write(randomString); // Display the random string .
}
我在列表中有 2 个值:10 和 11
所以列表的计数是 2 单击按钮时计数正确(计数假设为2,单击按钮后减少为1) 但是随机字符串可以显示 10 或 11 ,不应该是当我第一次单击按钮时,它显示 10 或 11 ,如果显示 10 ,第二次单击按钮它应该显示 11 然后第三次我按下它不应该显示任何东西。
---编辑-----
这就是我获取列表的方式(此代码位于 !Page.IsPostBack 之外的 PageLoad 中)
protected void PopulateMCQ()
{
string query = "...";
conn.Open();
SqlCommand cmd = new SqlCommand(query, conn);
SqlDataReader dr;
dr = cmd.ExecuteReader();
while (dr.Read())
{
Label questionID = new Label();
questionID.Text = dr["englishID"].ToString();
questionNo.Add(questionID.Text); // I add the values to the list<string> here
}
conn.Close();
}
【问题讨论】:
-
您的示例中缺少某些内容,因为您似乎从未致电
RandomMCQ1()? -
我确实发布了我将 RandomMCQ1() 放入页面加载的帖子
-
我无法将 RandomMCQ1() 放入按钮中,每次我点击按钮时它都会重新填充列表
-
如果您想以随机顺序显示整个列表,您可能需要置换列表。与其选择列表中的随机元素并打印它,不如先随机重新排列列表,然后打印它。 This other answer 可能会有所帮助。
-
什么置换?我不明白,除了置换之外没有其他方法吗?
标签: c# asp.net string list random