首页 > 解决方案 > 具有变量值的字典对象的通用方法并循环遍历它

问题描述

我需要将存储在结果(模型)中的所有来自 api 的字典对象转换为 StudentList 类型。

我正在为一个属性做这件事,如下所示:

StudentList<StudentData> testList = new StudentList<StudentData>();

foreach(KeyValuePair<string, IEnumerable<StudentData>> pair in result.StudentDataDetails)
{
    foreach(var x in pair.Value)
        testList.Add(x);
}

像 StudentData 一样,还有其他类对象,例如 TeacherData、ParentData.. 所有这些都需要更改为 StudentList<TeacherData>, StudentList<ParentData>.

我正在尝试为此构建一个通用方法。任何帮助将不胜感激。我需要通过以下方式检查结果中是否有字典属性,Dictionary<string, IEnumerable<T>>然后如上所述更改字典。T 是 StudentData、TeacherData 等。泛型方法需要返回StudentList<T>. 谢谢

标签: c#.net-core

解决方案


您可以编写一个泛型方法,该方法接受类型字典并从所有值中<string, IEnumerable<T>>返回 a 。List<T>这适用于任何类型T,无论是 a StudentTeacherParent等:

public static List<T> GetAllValues<T>(Dictionary<string, IEnumerable<T>> input)
{
    return input?.SelectMany(kvp => kvp.Value).ToList();
}

示例用法:

var studentDict = new Dictionary<string, IEnumerable<Student>>
{
    {"1", new List<Student> {new Student {Name = "First"}}},
    {"2", new List<Student> {new Student {Name = "Second"}}},
    {
        "3", new List<Student>
        {
            new Student {Name = "Third"},
            new Student {Name = "Fourth"}
        }
    },
};

var studentList = GetAllValues(studentDict);

studentList.ForEach(s => Console.WriteLine(s.Name));

输出

在此处输入图像描述


推荐阅读