静态字典没有填满

时间:2012-12-05 14:15:54

标签: c#

这是工作代码:

    static class Global
    {
        private static Dictionary<string, int> emails_compsIDs;
        private static Dictionary<string, int> set_emails_compsIDs { set { emails_compsIDs = value; } }
        private static DataTable MultiCompReport;

    static Global()
    {
        string e = string.Empty;
        Dictionary<string, int> emails_compsIDs = new Dictionary<string, int>();
        DataTable t = MySql.ExecuteSelect("SELECT Email, Company_ID FROM potencial_contact WHERE Email != '' AND Email IS NOT NULL");

        foreach (DataRow r in t.Rows)
        {
            int comp_id = Convert.ToInt32(r["Company_ID"]);
            e = r["Email"].ToString().Replace("\r", "").Replace("\t", "").Replace("\n", "").Trim().ToLower().Trim();
            if (!string.IsNullOrWhiteSpace(e) && !emails_compsIDs.ContainsKey(e))
            {
                try
                {
                    emails_compsIDs.Add(e, comp_id);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }
        if (emails_compsIDs.ContainsKey("linda@andatrade.com"))
            Console.WriteLine("Eureka");
        set_emails_compsIDs = emails_compsIDs;
    }
}

但是,当我做emails_compsIDs = new Dictionary<string, int>();时 为了在构造函数中初始化dictionay,代码只填充了第1行。 通过创建一个实例来指示ctor然后将结果放入我的静态字典中它填充了所有行。

2 个答案:

答案 0 :(得分:3)

错误是:

Dictionary<string, int> emails_compsIDs = ...

它声明了一个局部变量,而不是分配一个静态字段。它应该只是:

emails_compsIDs = new ...

如果只填充一行,您应该单步查找原因。

答案 1 :(得分:0)

我遇到了类似的问题,我在非静态类中声明了一个静态字典,但在类构造函数中初始化了字典。这导致每次都创建一个新字典。

private static Dictionary<string, Icon> IconDict;

public FileOps()
        {
            IconDict = new Dictionary<string, Icon>();
        }

您需要在声明本身中初始化字典。

private static Dictionary<string, Icon> IconDict = new Dictionary<string, Icon>();