我有一个带有预定义常量字符串的类,它用作按键,通过提供的密钥从外部存储中检索数据。
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);
}
在这些更改之后,我的方法只能用于正确的键,但我认为由于静态属性和隐式转换会降低性能。
所以我的问题是一个好主意?
我是否过度关注?
第二种方法与第一种方法相比要慢多少?
是否有其他方法可以防止传递错误的参数?
答案 0 :(得分:2)
我是否过度关注?
简短的回答,是的。
你要做的是阻止传递一个无效的参数,这个参数不是你应该首先做的,你应该考虑使用一个可能的枚举IF,这使得99.9%类型安全,几乎不需要检查。
在你需要将param作为字符串的情况下,只需在GetValue(string key)
中执行验证,如果您希望稍后处理它或者只是抛出异常,则返回null。