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

作者: wind681201 (阿風~~)   2020-09-10 11:05:08
請問各位大大,以下程式碼,_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而錯誤。
}
}
}
作者: awwseed (MOTO RIDER)   2020-09-10 11:40:00
Code可以貼在 https://dotnetfiddle.net/ 等地方方便閱讀不過你的問題應該是 _users[_user.ID] 不存在才炸?檢查是否存在的話用 .ContainsKey() 可能比較好https://dotnetfiddle.net/G1h69G不確定你其他地方是否有對 _users 做操作
作者: petercoin (彼得幣)   2020-09-10 12:29:00
同樓上 key不存在時要用Add 不然就exception了
作者: Litfal (Litfal)   2020-09-10 13:24:00
dict透過的索引鍵set不會跳錯啦
作者: awwseed (MOTO RIDER)   2020-09-10 13:37:00
原來 Dict 透過索引不會炸錯XD那就比較可能是 Users 裡面有其他地方對 _users 有操作?
作者: wind681201 (阿風~~)   2020-09-10 15:08:00
但這就是問題,其它地方沒有讓_users變null的問題都是在add,就算remove key也不會讓_users變null而且在新增時,我檢查過一次_users是不是null了
作者: gn1943141 (鳩臉)   2020-09-10 15:56:00
readonly一定有什麼地方賦空值,private跟static沒保證不能賦值,可能是時序問題導致或null的是user而不是users,確認看看
作者: t64141 (榕樹)   2020-09-10 16:16:00
有沒有可能 _user 是 null, 所以 _user.ID 拋錯,但因為位置與名字都跟 _users 太接近所以看錯了?
作者: petercoin (彼得幣)   2020-09-10 16:50:00
@Litfal 謝謝你的指正XD 我記成C++的map了QQ
作者: wind681201 (阿風~~)   2020-09-10 17:56:00
t64141你說的很有可能,因為重現了一樣的錯誤我會再過濾user.id的部份,謝謝
作者: haves560 (新鮮人)   2020-09-13 11:56:00
注意iis 回收 可能也會導致此問題
作者: Litfal (Litfal)   2020-09-13 14:25:00
iis回收會導致內容不見,但不會null,重新啟動就重建
作者: wind681201 (阿風~~)   2020-09-14 18:07:00
我也想過IIS的問題,但是,有可能回收時,正好在執行中嗎?然後會造成不見?
作者: kaneson (Lance)   2020-09-24 09:19:00
我覺得是Add()傳參數發生此_user非彼_user喔,變數名稱我看錯了,抱歉

Links booklink

Contact Us: admin [ a t ] ucptt.com