0

これは作業コードです:

    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>(); コンストラクターで辞書を初期化するためだけに行ったとき、コードは最初の行だけを埋めました。ctor を無効にしてインスタンスを作成し、結果を静的辞書に入れると、すべての行が埋められました。

4

2 に答える 2

3

エラーは次のとおりです。

Dictionary<string, int> emails_compsIDs = ...

これは、静的フィールドを割り当てるのではなく、ローカル変数を宣言します。次のようになります。

emails_compsIDs = new ...

それが1行だけを埋める場合は、ステップスルーして理由を見つける必要があります。

于 2012-12-05T14:20:16.110 に答える