gpt4 book ai didi

c# - 字典 trygetvalue null

转载 作者:行者123 更新时间:2023-11-30 21:05:59 30 4
gpt4 key购买 nike

 private Dictionary<Type, Bag<Event>> events = new Dictionary<Type, Bag<Event>>();

internal Bag<T> GetEventList<T>() where T:class
{
Type type = typeof(T);
Bag<Event> b;
if (events.TryGetValue(type, out b))
{
return b as Bag<T>;
}
else {
b = new Bag<T>() as Bag<Event>;
events[type] = b;
return b as Bag<T>;
}
}

internal void AddEvent<T>(T ev) where T:class,Event
{
Type type = typeof(T);
Bag<Event> b;
if (events.TryGetValue(type, out b))
{
b.Add(ev); // <= NullReferenceException, b is null
}
else {
b = new Bag<T>() as Bag<Event>;
events.Add(type, b);
b.Add(ev);
}
}

我总是在 AddEvent 中得到 NullReferenceException。事件字典仅在这两个函数中使用,我不知道为什么该值为空...我不会在任何地方插入空值!

我要疯了...

最佳答案

可能的罪魁祸首是这一行:

b = new Bag<T>() as Bag<Event>;

as cast 可能失败,这将分配 nullb .

我的猜测是您正在使用 Event 的子类作为 T 的类型, 自 Bag<T>在类型参数上不是协变的(我假设它是一个类,所以它不可能是,)强制转换失败,你最终得到 b正在null .

更新:根据下面的评论,问题确实是as throw 。要解决问题,只需创建一个 new Bag<Event>() , 无需强制转换。

关于c# - 字典 trygetvalue null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11421980/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com