gpt4 book ai didi

c# - IDictionary 上的 LINQ 操作

转载 作者:太空狗 更新时间:2023-10-29 20:39:01 24 4
gpt4 key购买 nike

假设我有以下词典:

private Dictionary<int, string> dic1 = new Dictionary<int, string>()
{
{ 1, "a" },
{ 2, "b" },
{ 3, "c" }
}

private Dictionary<SomeEnum, bool> dic2 = new Dictionary<SomeEnum, bool>()
{
{ SomeEnum.First, true },
{ SomeEnum.Second, false },
{ SomeEnum.Third, false }
}

我想将这两个词典转换成一个 Dictionary<string, object>

例如:

 dic1 = new Dictionary<string, object>()
{
{ "1", "a" },
{ "2", "b" },
{ "3", "c" }
}

dic2 = new Dictionary<string, object>()
{
{ "First", true },
{ "Second", false },
{ "Third", false }
}

如您所见,string这些词典的关键就是string以前的表示。

负责转换的方法具有以下签名:

 public static object MapToValidType(Type type, object value)
{
//....

if(typeof(IDictionary).IsAssignableFrom(type))
{
//I have to return a Dictionary<string, object> here
return ??;
}
}

我尝试了以下方法:

 ((IDictionary)value).Cast<object>().ToDictionary(i => ...);

但是i被转换为一个对象,所以我无法访问键或值项。为此,我需要将其转换为适当的 KeyValuePair<TKey, TValue> , 但我不知道 TKeyTValue类型。

另一种解决方案是:

IDictionary dic = (IDictionary)value;
IList<string> keys = dic.Keys.Cast<object>().Select(k => Convert.ToString(k)).ToList();
IList<object> values = dic.Values.Cast<object>().ToList();
Dictionary<string, object> newDic = new Dictionary<string, object>();
for(int i = 0; i < keys.Count; i++)
newDic.Add(keys[0], values[0]);
return newDic;

但是,我不太喜欢这种方法,我真的在寻找一种更简单、更友好的单行 LINQ 语句。

最佳答案

你可以试试这个,虽然没有 LINQ,我认为你不需要:

 Dictionary<string, object> ConvertToDictionary(System.Collections.IDictionary iDic) {
var dic = new Dictionary<string, object>();
var enumerator = iDic.GetEnumerator();
while (enumerator.MoveNext()) {
dic[enumerator.Key.ToString()] = enumerator.Value;
}
return dic;
}

或者一个 Linq:

return iDic.Keys.Cast<object>().ToDictionary(k=> k.ToString(), v=> iDic[v]);

关于c# - IDictionary 上的 LINQ 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31346297/

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