как объединить / объединить два разных списка в 1 - PullRequest
1 голос
/ 03 сентября 2011

Я работаю над приложением для платформы Windows Phone. Наткнуться на вопрос.

Я бы 2 разных списка, 1 прямое чтение из файла XML, а другой по некоторым расчетам. И я хочу объединить эти два списка в 1, чтобы я мог их отобразить.

Список 1:

public class studentClass1
{
    public string studentID { get; set; }
    public string studentFirstName { get; set; }
    public string studentLastName { get; set; }
}

Список 2:

public class studentClass2
{
    public string studentID { get; set; }
    public string studentGradePoint { get; set; }
}

Прежде всего, я прочитал студенческий класс1 через

var studentList= from query in studentIndex.Descendants("student")
                             select new driversClass
StudentList1 = studentList.ToList();

Во-вторых, я обрабатываю вычисление балла учащегося по функции и выводлю во второй список:

studentClass2 SG = new studentClass2
            {
                studentID = thestudentID ,
                studentGradePoint  = thestudentGradePoint .ToString()
            };

            StudentList2.Add(SG);

studentListAll = StudentList1 + StudentList2

Теперь я хочу объединить эти два списка, чтобы вывести их на экран, вызвав

studentResultListBox.Itemsource = StudentListAll;

какое-нибудь предложение, как будет выглядеть код? Благодаря.

Ответы [ 2 ]

3 голосов
/ 03 сентября 2011

Предполагая, что вы просто хотите объединить соответствующую информацию из обоих списков (это не совсем понятно из вашего вопроса) - введите третий класс studentClass3, который содержит все нужные вам свойства, и используйте соединение для сопоставления экземпляров с совпадающимиstudentID:

var studentList3 = (from s1 in studentList1
                    join s2 in studentList2 on s1.studentID equals s2.studentID
                    select new studentClass3()
                    {
                        studentFirstName = s1.studentFirstName,
                        studentID = s1.studentID,
                        studentGradePoint = s2.studentGradePoint,
                        studentLastName = s1.studentLastName
                    }).ToList();

Как правило, эту проблему следует решать, когда вы читаете в XML, а не пытаетесь объединить списки позже - наличие трех разных классов для учащихся может привести к путанице.Также взгляните на рекомендуемые соглашения об именах, они немного не подходят.

0 голосов
/ 03 сентября 2011

Использовать интерфейс, например

interface IStudent
{
    string studentID { get; }

    // other common properties below
}

public class StudentClass1 : IStudent
{
    public string studentID { get; set; }
    public string studentFirstName { get; set; }
    public string studentLastName { get; set; }
}

public class StudentClass2 : IStudent
{
    public string studentID { get; set; }
    public string studentGradePoint { get; set; }
}

, а затем

    studentResultListBox.Itemsource = list1.Cast<IStudent>()
                                           .Concat(list2.Cast<IStudent>())
                                           .ToList();

Или, если наследование не так, просто приведите все к System.Object (+ переопределить object.ToString)

 studentResultListBox.Itemsource = list1.Cast<object>()
                                        .Concat(list2.Cast<object>())
                                        .ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...