我从这里尝试了一些解决方案..没有成功!
这是我的代码以及错误消息,
SQLite.SQLiteConnection connection = new SQLite.SQLiteConnection(dbPath);
using (var db = new SQLite.SQLiteConnection(dbPath))
{
int i = 0;
var d = from x in db.Table<stations>() select x;
foreach (var sd in d)
{
pushpin[] Tanke = new pushpin[i];
Tanke[i].Titel = sd.name.ToString(); //IndexOutOfRangeException (see below)
Tanke[i].Text = sd.brand.ToString();
Tanke[i].longitude = sd.longitude;
Tanke[i].latitude = sd.latitude;
MapLayer.SetPosition(Tanke[i], new Location(Tanke[i].latitude, Tanke[i].longitude));
pinLayer.Children.Add(Tanke[i]);
ToolTipService.SetToolTip(Tanke[i], Tanke[i].Titel);
i++;
}
db.Dispose();
db.Close();
}
答案 0 :(得分:3)
当i为零时,您正在创建一个零元素数组。
pushpin[] Tanke = new pushpin[i];
Tanke[i].Titel = sd.name.ToString();
然后使用[0]访问第一个元素。那不行。零元素数组中没有元素。
答案 1 :(得分:0)
当您在foreach中逐步执行条目并且每次创建一个零元素数组(i = 0)时,您无法保存某些内容,因为[0]元素不存在
答案 2 :(得分:0)
问题是如何创建pushpin
数组。它看起来不像你需要数组所以这样做:
SQLite.SQLiteConnection connection = new SQLite.SQLiteConnection(dbPath);
using (var db = new SQLite.SQLiteConnection(dbPath))
{
var d = from x in db.Table<stations>() select x;
foreach (var sd in d)
{
var tmp = new pushpin();
tmp.Titel = sd.name.ToString(); //IndexOutOfRangeException (see below)
tmp.Text = sd.brand.ToString();
tmp.longitude = sd.longitude;
tmp.latitude = sd.latitude;
MapLayer.SetPosition(tmp, new Location(tmp.latitude, tmp.longitude));
pinLayer.Children.Add(tmp);
ToolTipService.SetToolTip(tmp, tmp.Titel);
}
db.Dispose();
db.Close();
}