c#string constants vs static properies

时间:2018-06-08 14:23:40

标签: c# performance constants

我有一个带有预定义常量字符串的类,它用作按键,通过提供的密钥从外部存储中检索数据。

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);
}

在这些更改之后,我的方法只能用于正确的键,但我认为由于静态属性和隐式转换会降低性能。

所以我的问题是一个好主意?

我是否过度关注?

第二种方法与第一种方法相比要慢多少?

是否有其他方法可以防止传递错误的参数?

1 个答案:

答案 0 :(得分:2)

  

我是否过度关注?

简短的回答,是的。

你要做的是阻止传递一个无效的参数,这个参数不是你应该首先做的,你应该考虑使用一个可能的枚举IF,这使得99.9%类型安全,几乎不需要检查。

在你需要将param作为字符串的情况下,只需在GetValue(string key)中执行验证,如果您希望稍后处理它或者只是抛出异常,则返回null。