[問題] 靜態變數會不見嗎?

看板C_Sharp (C#)作者 (阿風~~)時間3年前 (2020/09/10 11:05), 編輯推噓5(5022)
留言27則, 8人參與, 3年前最新討論串1/1
請問各位大大,以下程式碼,_users常會因null而錯誤, 但已經用private static 來宣告了,不是應該不會讓_users為null嗎? public static class Users { private static Dictionary<string, User> _users = new Dictionary<string, User>(); public static List<User> AllUser { get { return _users.Select(x=> x.Value).ToList(); } } public static void Add(this IIdentity _id, User _user) { if (_users is Dictionary<string, User>) { _users[_user.ID] = _user; //在這邊常會因為 _users是null而錯誤。 } } } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.183.247.253 (泰國) ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1599707111.A.E15.html

09/10 11:40, 3年前 , 1F
Code可以貼在 https://dotnetfiddle.net/ 等地方方便閱讀
09/10 11:40, 1F

09/10 11:41, 3年前 , 2F
不過你的問題應該是 _users[_user.ID] 不存在才炸?
09/10 11:41, 2F

09/10 11:43, 3年前 , 3F
檢查是否存在的話用 .ContainsKey() 可能比較好
09/10 11:43, 3F

09/10 11:58, 3年前 , 4F

09/10 11:58, 3年前 , 5F
不確定你其他地方是否有對 _users 做操作
09/10 11:58, 5F

09/10 12:29, 3年前 , 6F
同樓上 key不存在時要用Add 不然就exception了
09/10 12:29, 6F

09/10 13:24, 3年前 , 7F
dict透過的索引鍵set不會跳錯啦
09/10 13:24, 7F

09/10 13:37, 3年前 , 8F
原來 Dict 透過索引不會炸錯XD
09/10 13:37, 8F

09/10 13:38, 3年前 , 9F
那就比較可能是 Users 裡面有其他地方對 _users 有操作?
09/10 13:38, 9F

09/10 15:08, 3年前 , 10F
但這就是問題,其它地方沒有讓_users變null的問題
09/10 15:08, 10F

09/10 15:09, 3年前 , 11F
都是在add,就算remove key也不會讓_users變null
09/10 15:09, 11F

09/10 15:10, 3年前 , 12F
而且在新增時,我檢查過一次_users是不是null了
09/10 15:10, 12F

09/10 15:56, 3年前 , 13F
readonly
09/10 15:56, 13F

09/10 15:59, 3年前 , 14F
一定有什麼地方賦空值,private跟static沒保證不能賦
09/10 15:59, 14F

09/10 15:59, 3年前 , 15F
值,可能是時序問題導致
09/10 15:59, 15F

09/10 16:02, 3年前 , 16F
或null的是user而不是users,確認看看
09/10 16:02, 16F

09/10 16:16, 3年前 , 17F
有沒有可能 _user 是 null, 所以 _user.ID 拋錯,但因為
09/10 16:16, 17F

09/10 16:16, 3年前 , 18F
位置與名字都跟 _users 太接近所以看錯了?
09/10 16:16, 18F

09/10 16:50, 3年前 , 19F
@Litfal 謝謝你的指正XD 我記成C++的map了QQ
09/10 16:50, 19F

09/10 17:56, 3年前 , 20F
t64141你說的很有可能,因為重現了一樣的錯誤
09/10 17:56, 20F

09/10 17:56, 3年前 , 21F
我會再過濾user.id的部份,謝謝
09/10 17:56, 21F

09/13 11:56, 3年前 , 22F
注意iis 回收 可能也會導致此問題
09/13 11:56, 22F

09/13 14:25, 3年前 , 23F
iis回收會導致內容不見,但不會null,重新啟動就重建
09/13 14:25, 23F

09/14 18:07, 3年前 , 24F
我也想過IIS的問題,但是,有可能回收時,正好在執行
09/14 18:07, 24F

09/14 18:07, 3年前 , 25F
中嗎?然後會造成不見?
09/14 18:07, 25F

09/24 09:19, 3年前 , 26F
我覺得是Add()傳參數發生此_user非彼_user
09/24 09:19, 26F

09/24 09:32, 3年前 , 27F
喔,變數名稱我看錯了,抱歉
09/24 09:32, 27F
文章代碼(AID): #1VMPVduL (C_Sharp)
文章代碼(AID): #1VMPVduL (C_Sharp)