У меня есть класс с предопределенными константными строками, которые используются в качестве ключей для извлечения данных из внешнего хранилища по предоставленному ключу.
public class StorageKeys
{
public const string SomeKey = "Foo";
public const string AnotherKey = "Foooo";
}
public interface IStorage
{
string GetValue(string key);
}
Который используется следующим образом:
IStorage t = new Storage();
string value = t.GetValue(StorageKeys.SomeKey);
Это работает, но я обеспокоен тем, что потенциальные возможности можно вызвать GetValue
методом только с строковым аргументом, который может вызвать ошибку:
string value = t.GetValue("Illegal key");
Вот почему я пришел к этой идее:
public class StorageKeys
{
public static StorageKeys SomeKey = new StorageKeys("Foo");
public static StorageKeys AnotherKey = new StorageKeys("Foooo");
private StorageKeys(string key)
{
_key = key;
}
private readonly string _key;
public static implicit operator string(StorageKeys key) => key._key;
}
public interface IStorage
{
string GetValue(StorageKeys key);
}
После этих изменений мой метод может использоваться только с правильными ключами, но я думаю, что это снизит производительность из-за статических свойств и неявного приведения.
Так что мой вопрос - это хорошая идея??
Я обеспокоен?
Насколько медленнее будет мой второй подход по сравнению с первым?
Есть ли другой способ предотвратить передачу неверных аргументов?