没有添加到字典中的项目

时间:2014-04-19 11:18:20

标签: c# dictionary

我想将sql数据库中的项目添加到字典中,但是值在对象引用中输入为null,而代码是我使用atm

public static Dictionary<string, prizedbinfo> dbprizes = new Dictionary<string, prizedbinfo>();

    private void LoadData(string dataloc)
    {
            if (!File.Exists(dataloc))
            {
                MessageBox.Show(dataloc + " not found.");
                return;
            }
            var connection = new SQLiteConnection("Data Source=" + dataloc);
            connection.Open();

            var datacommand = new SQLiteCommand("SELECT prizeID, createdOn, expiresOn, modifiedOn, status, redeemedOn, giftedOn, claimedOn FROM mySnackData", connection);
            List<string[]> datas = ExecuteStringCommand(datacommand, 9);

            foreach (string[] row in datas)
            {
                if (!Program.dbprizes.ContainsKey(row[0]))
                {
                    Program.dbprizes.Add(row[0], new prizedbinfo(row));
                }
            }
            connection.Close();
    }

和prizedbinfo对象是

class prizedbinfo
{
    public prizedbinfo(string[] dbdata)
    {
        string prizeID = dbdata[0];
        string createdOn = dbdata[1];
        string expiresOn = dbdata[2];
        string modifiedOn = dbdata[3];
        string status = dbdata[4];
        string redeemedOn = dbdata[5];
        string giftedOn = dbdata[6];
        string claimedOn = dbdata[7];
        string name = dbdata[8];
    }
    public string prizeID { get; set; }
    public string createdOn { get; set; }
    public string expiresOn { get; set; }
    public string modifiedOn { get; set; }
    public string status { get; set; }
    public string redeemedOn { get; set; }
    public string giftedOn { get; set; }
    public string claimedOn { get; set; }
    public string name { get; set; }

}

我已经使用断点对其进行了测试,并且由于某种原因,所有数据都正确地添加到数据和行但不是prizedbinfo对象

1 个答案:

答案 0 :(得分:3)

string构造函数中的所有变量中删除prizedbinfo关键字。您正在创建立即超出范围的本地变量,因此您将失去价值。

public prizedbinfo(string[] dbdata)
{
    prizeID = dbdata[0];
    createdOn = dbdata[1];
    expiresOn = dbdata[2];
    modifiedOn = dbdata[3];
    status = dbdata[4];
    redeemedOn = dbdata[5];
    giftedOn = dbdata[6];
    claimedOn = dbdata[7];
    name = dbdata[8];
}