大写一系列 C# KeyValuePairs 中的所有键
Uppercase all keys in a series of C# KeyValuePairs
我有一个 JSON 对象的列表,我正在遍历每个对象,我只是想处理其中的所有 KeyValuePairs 以便键是大写的,然后 return修改后的对象。
这就是我的尝试:
public static List<JObject> normalizeKeys(List<JObject> jObjList)
{
jObjList.ForEach(jobj => {
foreach(var kvp in jobj)
{
kvp.Key = kvp.Key.ToUpper();
}
});
return jObjList;
}
但它没有执行,而是我得到 KeyValuePair<string, JToken>.Key cannot be assigned to -- it is readonly.
有没有人对如何完成我所追求的有任何建议?
猜猜你自己知道答案,你必须创建一个新的集合并将项目复制过来,因为键是键,它区分大小写,并且不能更改,否则你可能最终得到 2 组数据, 一组是普通大小写,另一组是大写。
解决方法如下:
public static List<JObject> normalizeKeys(List<JObject> jObjList)
{
// create a new list for return and copy over the existing items
var jObjReturnList = new List<JObject>(jObjList.Count);
jObjList.ForEach(jobj =>
{
var jObjNew = new JObject();
foreach (var kvp in jobj)
{
jObjNew.Add(kvp.Key.ToUpper(), kvp.Value);
}
jObjReturnList.Add(jObjNew);
});
return jObjReturnList;
}
虽然给定的答案有效,但我倾向于说它既不尽如人意,也不尽如人意。我们可以使两者兼而有之。首先,解决 one 对象的问题:
public static JObject NormalizeKeys(JObject originalObject)
{
var newObject = new JObject();
foreach (var kvp in originalObject)
newObject.Add(kvp.Key.ToUpper(), kvp.Value);
return newObject;
}
现在解决列表问题:
var newList = oldList.Select(x=>NormalizeKeys(x)).ToList();
或者,更短:
var newList = oldList.Select(NormalizeKeys).ToList();
这不是比所有嵌套循环的东西更令人愉快吗?说如何归一化一个对象,然后说要将该函数应用到列表中,就大功告成了。
我有一个 JSON 对象的列表,我正在遍历每个对象,我只是想处理其中的所有 KeyValuePairs 以便键是大写的,然后 return修改后的对象。
这就是我的尝试:
public static List<JObject> normalizeKeys(List<JObject> jObjList)
{
jObjList.ForEach(jobj => {
foreach(var kvp in jobj)
{
kvp.Key = kvp.Key.ToUpper();
}
});
return jObjList;
}
但它没有执行,而是我得到 KeyValuePair<string, JToken>.Key cannot be assigned to -- it is readonly.
有没有人对如何完成我所追求的有任何建议?
猜猜你自己知道答案,你必须创建一个新的集合并将项目复制过来,因为键是键,它区分大小写,并且不能更改,否则你可能最终得到 2 组数据, 一组是普通大小写,另一组是大写。
解决方法如下:
public static List<JObject> normalizeKeys(List<JObject> jObjList)
{
// create a new list for return and copy over the existing items
var jObjReturnList = new List<JObject>(jObjList.Count);
jObjList.ForEach(jobj =>
{
var jObjNew = new JObject();
foreach (var kvp in jobj)
{
jObjNew.Add(kvp.Key.ToUpper(), kvp.Value);
}
jObjReturnList.Add(jObjNew);
});
return jObjReturnList;
}
虽然给定的答案有效,但我倾向于说它既不尽如人意,也不尽如人意。我们可以使两者兼而有之。首先,解决 one 对象的问题:
public static JObject NormalizeKeys(JObject originalObject)
{
var newObject = new JObject();
foreach (var kvp in originalObject)
newObject.Add(kvp.Key.ToUpper(), kvp.Value);
return newObject;
}
现在解决列表问题:
var newList = oldList.Select(x=>NormalizeKeys(x)).ToList();
或者,更短:
var newList = oldList.Select(NormalizeKeys).ToList();
这不是比所有嵌套循环的东西更令人愉快吗?说如何归一化一个对象,然后说要将该函数应用到列表中,就大功告成了。