将对象转换为KeyValuePair
本文关键字:KeyValuePair 转换 对象 | 更新日期: 2023-09-27 18:28:03
对于具有string
和int
成员的实体,我有一个IEnumerable<Entityclass>
i需要将其转换为KeyValuePair<string, double>
的数组,反之亦然
它因强制转换错误而失败。
[DataContract]
public class Entityclass
{
[DataMember]
public string text{ get; set; }
[DataMember]
public int textcount{ get; set; }
}
我有IEnumerable<Entityclass>
如何从
IEnumerable<Entityclass>
转换为KeyvaluePair<string, double>[]
的数组?如何将
KeyvaluePair<string, double>[]
数组转换为KeyvaluePair<string, int>[]
数组?如何将
KeyvaluePair<string, double>
转换回IEnumerable?
我试过:
topics is IEnumerable<Entityclass>;
topics.Cast<KeyValuePair<string, double>>().ToArray();
因强制转换错误而失败
您需要将每个主题投影到KeyValuePair
中。Linq Select
扩展方法做到了这一点:
topics
.Select(x=> new KeyValuePair<string, double>(x.text, x.textcount))
.ToArray();
IEnumerable
有一个名为ToDictionary
的扩展。这是我们自己的ToKeyValuePairs
的一个很好的起点。
public static List<KeyValuePair<TKey, TElement>> ToKeyValuePairs<TSource, TKey, TElement>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector)
{
List<KeyValuePair<TKey, TElement>> pairs = new List<KeyValuePair<TKey, TElement>>();
foreach (var element in source)
pairs.Add(new KeyValuePair<TKey, TElement>(keySelector(element), elementSelector(element)));
return pairs;
}
现在,在指定键和值的同时,很容易获取任何IEnumerable
并将其转换为KeyValuePair
。
// Array of objects (tuples)
(string First, string Middle, string Last)[] tuples = new (string First, string Middle, string Last)[3];
tuples[0] = new("Micheal", "Joseph", "Jackson");
tuples[1] = new("Elvis", "Aaron", "Presley");
tuples[2] = new("Arnold", "Alois ", "Schwarzenegger");
// Convert only First and Last properties to KeyValuePairs.
var keyPairs = tuples.ToKeyValuePairs(a => a.First, a => a.Last);
在您的情况下,您只需要使用.ToArray()
中的内部版本。
var keyPairs = tuples.ToKeyValuePairs(a => a.First, a => a.Last).ToArray();