ProtoBuff.net 的一个恼人行为是空集合被序列化为null
. 这可能会产生一些很难确定的错误。
从我的应用程序中检索缓存值是通过以下函数完成的:
public T Get<T>(string cacheKey)
{
var data = (byte[])Database.StringGet(cacheKey);
if (data == null)
{
return default(T);
}
return Serialiser.Deserialise<T>(data);
}
如果T
isList<int>
的值为零,这将返回一个空列表(因为data == null
它将返回default(List<int>)
)。
如果T
是Dictionary<bool, Hashset<int>
,其中两个键true
和false
存在但对应的哈希集中没有值,则键存在但值是null
。
有什么方法可以确定是否T
包含集合,如果集合为空,则返回空集合而不是 null?最好,它会检查对象中任何地方的空集合,而不仅仅是 T 本身是否是包含集合的集合。
另一种方法(我现在正在做的)是当我知道从缓存中获取的显式类型时,尝试记住检查空值,这并不理想。