gpt4 book ai didi

c# - 将不同类型字典的重载合并到一个函数中

转载 作者:行者123 更新时间:2023-11-30 19:58:58 25 4
gpt4 key购买 nike

我需要一个辅助函数来转换像 "1=alice;2=bob;3=charlie" 这样的字符串进入Dictionary<int, string> , 和类似 "1=true;2=false;3=true" 的字符串进入Dictionary<int, bool> , 等等

为此,我编写了很多基本上是相互复制和粘贴的辅助函数:

    private static void load(Dictionary<int, string> dict, string s)
{
dict.Clear();
string[] items = s.Split(';');
foreach (string item in items)
{
if (item.Contains("="))
{
string[] kv = item.Split('=');
dict[int.Parse(kv[0])] = kv[1];
}
}
}

private static void load(Dictionary<int, bool> dict, string s)
{
dict.Clear();
string[] items = s.Split(';');
foreach (string item in items)
{
if (item.Contains("="))
{
string[] kv = item.Split('=');
dict[int.Parse(kv[0])] = bool.Parse(kv[1]);
}
}
}

private static void load(Dictionary<int, int> dict, string s)
{
dict.Clear();
string[] items = s.Split(';');
foreach (string item in items)
{
if (item.Contains("="))
{
string[] kv = item.Split('=');
dict[int.Parse(kv[0])] = int.Parse(kv[1]);
}
}
}

还有更多,关于其他数据类型,例如long , DateTime , 等等

有没有办法让辅助函数只有一个?我试过 Dictionary<object, object>但它没有用。

最佳答案

是的,你应该有一个通用的方法来代替。就个人而言,我会让它返回一个新字典而不是清除现有字典,请注意......并使用 LINQ 来实现它:

private static Dictionary<int, T> Load<T>(string text, Func<string, T> parser)
{
return s.Split(';')
.Where(item => item.Contains("="))
.Select(item => item.Split('=', 2))
.ToDictionary(pair => int.Parse(pair[0]), pair => parser(pair[1]));
}

然后调用它:

Dictionary<int, int> foo = Load(text, int.Parse);
Dictionary<int, bool> bar = Load(text, bool.Parse);
Dictionary<int, string> baz = Load(text, x => x);

关于c# - 将不同类型字典的重载合并到一个函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25385558/

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