我有一个带有预定义常量字符串的类,这些字符串用作键,通过提供的键从外部存储中检索数据。
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);
}
在这些更改之后,我的方法只能使用正确的键,但我认为由于静态属性和隐式转换,它会降低性能。
所以我的问题是这是一个好主意吗?
我是不是多虑了?
与第一种方法相比,我的第二种方法会慢多少?
还有其他方法可以防止传递错误的参数吗?
最佳答案
Am I overconcerned?
简短回答,是的。
您想要做的是防止传递无效参数,这不是您首先应该做的,您应该考虑使用可能的枚举 IF,这使其 99.9% 类型安全并且几乎没有需要进行检查。
在您需要该参数为字符串的情况下,只需在 GetValue(string key)
中执行验证,如果您希望稍后处理该参数,则返回 null,或者只是抛出异常.
关于C# 字符串常量与静态属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50762753/