diff --git a/bench/algorithm/lru/2.cs b/bench/algorithm/lru/2.cs index e57940d93..a2ca0afb0 100644 --- a/bench/algorithm/lru/2.cs +++ b/bench/algorithm/lru/2.cs @@ -32,22 +32,21 @@ public static void Main(string[] args) } } -public class Pair -{ +public struct Pair +{ public TK Key; - - public TV Value; + public TV Value; } public class LRU + where TK : notnull + where TV : notnull { public int Size { get; private set; } - private readonly Dictionary>> _key_lookup; - private readonly LinkedList> _entries; - public LRU(int size) + public LRU(int size) { Size = size; _key_lookup = new Dictionary>>(size); @@ -58,7 +57,11 @@ public bool TryGet(TK key, out TV value) { if (_key_lookup.TryGetValue(key, out var node)) { +#if NET5_0_OR_GREATER + value = node.ValueRef.Value; +#else value = node.Value.Value; +#endif _entries.Remove(node); _entries.AddLast(node); return true; @@ -71,17 +74,17 @@ public void Put(TK key, TV value) { if (_key_lookup.TryGetValue(key, out var node)) { - node.Value.Value = value; + node.ValueRef.Value = value; _entries.Remove(node); _entries.AddLast(node); } else if (_entries.Count == Size) { var first = _entries.First; - _key_lookup.Remove(first.Value.Key); + _key_lookup.Remove(first!.Value.Key); _entries.RemoveFirst(); - first.Value.Key = key; - first.Value.Value = value; + first.ValueRef.Key = key; + first.ValueRef.Value = value; _entries.AddLast(first); _key_lookup[key] = first; }