美好的一天!我想帮助我的编程项目中的简单代码。 我的问题是我找不到如何在列表框中随机化文本项的解决方案。这些项目是从我的 MS Access 数据库中读取的。这是我的一些代码。
Com.CommandText = "SELECT * FROM search";
OleDbDataReader reader = Com.ExecuteReader();
object[] obj = new object[256];
while (reader.Read())
{
reader.GetValues(obj);
if (label1.Text == obj[0].ToString())
{
listBox1.Items.Add(reader.GetString(1));
listBox1.Items.Add(reader.GetString(2));
listBox1.Items.Add(reader.GetString(3));
listBox1.Items.Add(reader.GetString(4));
}
}
reader.Close();
conn.Close();
Random random = new Random();
string[] words = { listBox1.Items.ToString() };
listBox4.Items.Add(words[random.Next(0, words.Length)]);
它不起作用。
答案 0 :(得分:1)
假设您希望列表框中的项目按随机顺序排列,您可以将值读入字符串列表,随机化它们,然后将它们添加到列表框中。在答案中使用Shuffle方法:Randomize a List<T>它看起来像:
Com.CommandText = "SELECT * FROM search";
OleDbDataReader reader = Com.ExecuteReader();
var words = new List<string>();
while (reader.Read())
{
if (string.Compare(label1.Text, reader.GetString(0)) == 0)
{
for (int i = 1 ; i < 5 ; i++)
{
words.Add(reader.GetString(i));
}
}
}
reader.Close();
conn.Close();
listbox1.Items.AddRange(words.ToArray());
words.Shuffle();
listbox4.Items.AddRange(words.ToArray());
将以下类添加到您的系统中(使用您的命名空间):
public static class ListExtensions
{
public static void Shuffle<T>(this IList<T> list)
{
Random rng = new Random();
int n = list.Count;
while (n > 1) {
n--;
int k = rng.Next(n + 1);
T value = list[k];
list[k] = list[n];
list[n] = value;
}
}
}