将对象转换为KeyValuePair

7
我有一个实体的 IEnumerable<Entityclass>,其中包含一个 string 和一个 int 成员。我需要将它转换为一个 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 是 IEnumerable<Entityclass>;
  • topics.Cast<KeyValuePair<string, double>>().ToArray(); 报错,无法转换

问题标题应该修正为“将列表或可枚举对象转换为KeyValuePair数组”,而不是单个对象。 - Ibrahim Abdulkarim
2个回答

21

你需要将每个主题投射到一个 KeyValuePair 中。Linq 的 Select 扩展方法可以做到这一点:

topics
    .Select(x=> new KeyValuePair<string, double>(x.text, x.textcount))
    .ToArray();

0

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();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接