namespace PckStudio.Interfaces { public delegate bool TryGetDelegate(TKey key, out TValue value); public delegate bool TrySetDelegate(TKey key, TValue value); public sealed class TryGet : ITryGet { private TryGetDelegate _tryGetDelegate; public static ITryGet FromDelegate(TryGetDelegate tryGetDelegate) => new TryGet(tryGetDelegate); bool ITryGet.TryGet(TKey key, out TValue value) => _tryGetDelegate(key, out value); private TryGet(TryGetDelegate tryGetDelegate) { _tryGetDelegate = tryGetDelegate; } } public sealed class TrySet : ITrySet { private TrySetDelegate _trySetDelegate; public static ITrySet FromDelegate(TrySetDelegate trySetDelegate) => new TrySet(trySetDelegate); bool ITrySet.TrySet(TKey key, TValue value) => _trySetDelegate(key, value); private TrySet(TrySetDelegate trySetDelegate) { _trySetDelegate = trySetDelegate; } } public sealed class TryGetSet : ITryGetSet { public static ITryGetSet FromDelegates(TryGetDelegate tryGetDelegate, TrySetDelegate trySetDelegate) => new TryGetSet(tryGetDelegate, trySetDelegate); public bool TryGet(TKey key, out TValue value) => _tryGetDelegate(key, out value); public bool TrySet(TKey key, TValue value) => _trySetDelegate(key, value); private TryGetDelegate _tryGetDelegate; private TrySetDelegate _trySetDelegate; private TryGetSet(TryGetDelegate tryGetDelegate, TrySetDelegate trySetDelegate) { _tryGetDelegate = tryGetDelegate; _trySetDelegate = trySetDelegate; } } public interface ITryGet { bool TryGet(TKey key, out TValue value); } public interface ITrySet { bool TrySet(TKey key, TValue value); } public interface ITryGetSet : ITryGet, ITrySet { } }