C# 字符串常量与静态属性

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

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

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

我是不是多虑了?

与第一种方法相比,我的第二种方法会慢多少?

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

最佳答案

Am I overconcerned?

简短回答,是的。

您想要做的是防止传递无效参数,这不是您首先应该做的,您应该考虑使用可能的枚举 IF,这使其 99.9% 类型安全并且几乎没有需要进行检查。

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

关于C# 字符串常量与静态属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50762753/

相关文章:

java - 关于动态规划我需要了解什么?

performance - 当响应仅包含单个值时提取响应

javascript - ES6 for 循环中 const 的内部原理

c++ - "const T*"可以匹配指向自由函数的指针吗?

c# - 以微秒为单位的日期时间

c# - Entity Framework 是否有某种上下文缓存?

c# - 您可以在 C# 中循环访问 List<> 中的项目吗

java - 使用 Runtime.exec() 生成的进程的高效执行和输出流重定向

c++ - 在一行中定义和初始化 STL 常量

c# - 如何编写正确的静态方法 - 多线程安全