ProtoBuff.netの厄介な動作は、空のコレクションがnull
としてシリアル化されていることです。これはバグをピン止めするのにかなり難しいことがあります。私のアプリケーションからのキャッシュされた値のC#には空のコレクションが含まれています
検索は、次の関数で行われます。
public T Get<T>(string cacheKey)
{
var data = (byte[])Database.StringGet(cacheKey);
if (data == null)
{
return default(T);
}
return Serialiser.Deserialise<T>(data);
}
T
がゼロの値を持つList<int>
であれば(それはdefault(List<int>)
を返しますdata == null
ので)、これは空のリストを返します。 T
は、2つのキーtrue
とfalse
が存在Dictionary<bool, Hashset<int>
、であるが、対応するHashSetのに値がない
場合は値がnull
であるが、キーが存在します。
T
にコレクションが含まれているかどうかを判断する方法はありますか?その場合、コレクションが空の場合はnullの代わりに空のコレクションを返しますか?好ましくは、T自体がコレクションを含むコレクションではなく、オブジェクトのどこかで空のコレクションをチェックすることが好ましい。
私が今行っている選択肢は、理想的ではないキャッシュから取得したときに明示的な型を知っているときに、nullをチェックすることを忘れないようにすることです。
Getを呼び出すときに期待しているタイプを知っていますか?もしそうなら、この場合に過負荷がある。 – Phil