В C# как получить результаты цикла while вне цикла в виде массива String[]
Я новичок в C#, я использую FiniSar.SQLite для соединения с моей database.db. я могу легко получить результаты цикла while внутри цикла.
но я хочу получить доступ ко всем результатам вне цикла в виде массива String[]. Я поделился своим кодом с вами, я очень ценю это, если кто-то поделится хорошим ответом для меня.
Файл >> Form1.cs
private void buttonStem_Click(object sender, EventArgs e)
{
SQLiteConnection sqlite_conn;
SQLiteCommand sqlite_cmd;
SQLiteDataReader sqlite_datareader;
sqlite_conn = new SQLiteConnection("Data Source=database.db;Version=3;New=False;Compress=True;");
sqlite_conn.Open();
sqlite_cmd = sqlite_conn.CreateCommand();
sqlite_cmd.CommandText = "SELECT * FROM GList";
sqlite_datareader = sqlite_cmd.ExecuteReader();
string[] gList;
while ( sqlite_datareader.Read() )
{
gList = sqlite_datareader.GetString(1);
}
gList = // { "cat", "dog", "horse" }; << " I want results OutSide Loop something like that "
sqlite_conn.Close();
}
Потеря данных в gList вне цикла
2 ответа
Массив C# имеет фиксированный размер, поэтому было бы проще использовать список:
List<string> list = new List<string>();
while (datareader.Read()) {
list.Add(datareader.GetString(1));
}
Если вам действительно нужен массив, вы можете преобразовать его потом:
string[] gList = list.ToArray();
Массивы должны быть инициализированы с количеством элементов, которые вы хотите поместить в этот массив, затем каждый отдельный элемент может быть вставлен в массив в фактической позиции, которая идет от нуля до длины массива меньше 1. Таким образом, ваш код, предполагая что вы получаете три элемента из базы данных, должно быть что-то вроде этого
string[] gList = new string[3];
int i = 0;
while ( sqlite_datareader.Read() )
{
gList[i] = sqlite_datareader.GetString(1);
i++;
}
Как вы можете видеть, это абсолютно невыполнимо, потому что очень трудно заранее знать, сколько элементов вы извлекаете из базы данных (и вы никогда не должны ограничивать свой код таким образом). Так что нужен лучший инструмент. Это общая коллекция List<T>
List<string> gList = new List<string>();
while ( sqlite_datareader.Read() )
gList.Add(sqlite_datareader.GetString(1));
List<T>
не имеет проблем с добавлением элементов и имеет множество других функций, которые делают его предпочтительным по сравнению с массивом голых костей. И, в любом случае, вы можете использовать его как массив таким образом
foreach(string s in gList)
Console.WriteLine(s);
или же
for(int x = 0; x < gList.Count - 1; x++)
Console.WriteLine(gList[x]);