gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:59:51 25 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/

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