gpt4 book ai didi

C# 将不同的设置存储在一个对象中

转载 作者:行者123 更新时间:2023-12-02 21:59:01 26 4
gpt4 key购买 nike

我有一个代表当前正在发生的事件的对象。这个事件包含很多设置。将所有设置变量存储在事件对象内的最佳实践是什么?

设置存储在数据库中(现在根据基类存储在不同的列中:ValueString、ValueInt、ValueBool、ValueDateTime、ValueFloat、ValueDecimal)。唯一的键代表数据库中的设置。

一旦我加载了事件对象,我就会将其存储在本地缓存中以便快速访问。

我应该将所有内容都转为反对吗? (感觉就像不需要强制转换来获取/设置设置)

class Event
{
// string = settings key
Dictionary<string, object> _settings;

public void AddSetting(string key, object value)
public object GetSetting(string key)
}

或者我应该把它放在不同的词典中吗?

class Event
{
// string = settings key
Dictionary<string, string> _settingStrings;
Dictionary<string, int> _settingInts;
...

public void AddSetting(string key, string value)
public void AddSetting(string key, int value)
...

public string GetStringSetting(string key)
public int GetIntSetting(string key)
...
}

有什么想法吗?

最佳答案

您可以将所有内容存储为对象,但不要执行直接转换,而是使用泛型来构建易于使用的 API:

private IDictionary<string,object> _settings = new Dictionary<string,object>();

public void AddSetting<T>(string key, T value) {
_settings[key] = value;
}
public T GetSetting<T>(string key, T notFound = default(T)) {
object res;
if (!_settings.TryGetValue(key, out res) || !(res is T)) {
return notFound;
}
return (T)res;
}

强制转换仍然存在,但 API 对用户隐藏了它:现在用户可以安全地写入

string searchPath = settingContainer.GetSetting<string>("searchPath");
int retryCount = settingContainer.GetSetting<int>("retryCount", -1);

关于C# 将不同的设置存储在一个对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17249354/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com