using System.Collections;
using System.Collections.Generic;
public class CacheResult<T>
public T Value {get; set;}
public bool Hit {get; set;}
public T Get<T>(CacheResult<T> valueToRetrieve)
return ConvertCacheResultToValue(valueToRetrieve);
private T ConvertCacheResultToValue<T>(CacheResult<T> cacheResult)
if (cacheResult.Hit && cacheResult.Value == null && typeof(IEnumerable).IsAssignableFrom(typeof(T)))
return (T)Activator.CreateInstance(typeof(T));
return cacheResult.Value;
public static void Main()
Console.WriteLine(System.Text.Json.JsonSerializer.Serialize(redis.Get(new CacheResult<List<string>> { Value = new List<string> { "a", "b" }, Hit = true })));
Console.WriteLine(System.Text.Json.JsonSerializer.Serialize(redis.Get(new CacheResult<IEnumerable<string>> { Value = new List<string> { "a", "b" }, Hit = true })));
Console.WriteLine(System.Text.Json.JsonSerializer.Serialize(redis.Get(new CacheResult<string> { Value = "", Hit = true })));
Console.WriteLine(System.Text.Json.JsonSerializer.Serialize(redis.Get(new CacheResult<string> { Value = "test", Hit = true })));
Console.WriteLine(System.Text.Json.JsonSerializer.Serialize(redis.Get(new CacheResult<List<string>> { Value = null, Hit = true })));
Console.WriteLine(System.Text.Json.JsonSerializer.Serialize(redis.Get(new CacheResult<string> { Value = null, Hit = false })));
Console.WriteLine(System.Text.Json.JsonSerializer.Serialize(redis.Get(new CacheResult<List<string>> { Value = null, Hit = false })));
Console.WriteLine(System.Text.Json.JsonSerializer.Serialize(redis.Get(new CacheResult<IEnumerable<string>> { Value = null, Hit = false })));