Используем Оператор Неявного Приведения для Сокращения Кода
Если вы используете кэш или любое другое хранилище типа ключ-значение, часто полезно, чтобы ключи кэша были структурированы, например, имели префикс, значение ключа и его версию.
Поэтому их можно сделать строго типизированными:
public class CacheKey
{
private readonly string _key;
public CacheKey()
{
_key = $"{Prefix}-{Key}-{Version}";
}
public required string Prefix { get; init; }
public required string Key { get; init; }
public required int Version { get; init; }
public string GetKey() => _key;
}
Тогда получить значение из кэша можно так:
var value =
await db.StringGetAsync(сacheKey.GetKey());
Метод StringGetAsync принимает строку, поэтому нужно вызвать метод GetKey, чтобы получить строковое представление CacheKey. Но было бы здорово обойтись без вызова GetKey.
Оператор неявного приведения
Обновим класс CacheKey, добавив оператор неявного приведения:
public class CacheKey
{
private readonly string _key;
public CacheKey()
{
_key = $"{Prefix}-{Key}-{Version}";
}
public required string Prefix { get; init; }
public required string Key { get; init; }
public required int Version {get; init; }
public static implicit operator
string(CacheKey key) => key._key;
}
Теперь переменная типа CacheKey будет неявно приведена к строке, и мы можем получить значение кэша по ключу без вызова GetKey:
var value =
await db.StringGetAsync(cacheKey);
Источник: https://josef.codes/use-the-implicit-operator-to-reduce-noise-in-your-code/