[问题] 静态变量会不见吗?

楼主: 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