Не могу неявно преобразовать тип Listк спискуошибка - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть List, называемый FeeCollection в двух разных местах, то есть List<BO.SchoolFee.FeeCollection> & List<BO.Student.FeeCollection>.Когда я присваиваю SchoolFee.FeeCollection объект Student.FeeCollection, это показывает ошибку.Мой код

 studentObj.FeesCollectionPending = paymentlist; 

Скриншот ошибки

enter image description here

Как я могу решить эту проблему?Спасибо.

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

Вы не можете назначить список списку.Вам нужно использовать функцию Select в Linq или создать неявный оператор приведения

0 голосов
/ 07 февраля 2019

Хотя BO.SchoolFee.FeeCollection выглядит очень похоже на BO.Student.FeeCollection, для вашего компилятора это очень разные классы.

Вы забыли написать нам типы обоих FeeCollections.Кажется, они оба реализуют IEnumerable:

class FeeCollection : IEnumerable<Fee> {...}

Если ваша FeeCollection не реализует его, рассмотрите возможность его добавления.Люди ожидают, что это осуществит IEnumerable<Fee>, возможно даже ICollection<Fee>.Это всего лишь несколько строк кода.

Как только вы внедрили IEnumerable<fee>, вашей целевой коллекции требуется конструктор, который принимает это IEnumerable<Fee> в качестве ввода.

FeeCollection(IEnumerable<Fee> fees)
{
    foreach (Fee fee in fees)
       this.Add(fee);
}

Если выне хотите добавлять конструктор, рассмотрите возможность создания функции конвертера:

Я напишу решение в виде функций расширения, поэтому вам не нужно менять исходные классы Fee и FeeCollections.Кроме того, использование выглядит как LINQ.См. метод расширения: демистифицировано

static Student.FeeCollection ToStudentFeeCollection(this IEnumerable<Fee> fees)
{
      Student.FeeCollection feeCollection = new Student.FeeCollection();
      foreach (Fee fee in fees)
      {
          feeCollection.Add(fee);
      }
      return feeCollection;
}

static Student.FeeCollection ToStudentFeeCollection(this SchoolFee.Collection schoolFeeCollection)
{
     IEnumerable<Fee> schoolFees = schoolFeeCollection;
     return schoolFees.ToStudentFees();

     // or if you don't want to implement IEnumerable<Fee>:
     var studentFeeCollection = new Student.FeeCollection();
     foreach (var schoolFee in schoolFeeCollection.GetFees())
     {
          studentFeeCollection.Add(schoolFee);
     }
}

Использование:

List<School.FeeCollection> schoolFeeCollections = ...
// convert every schoolFeeCollection to a StudentFeeCollection:
List<Student.FeeCollection> studentFeeCollections = schoolFeeCollections
    .Select(schoolFeeCollection => schoolFeeCollection.ToStudentFeeCollection())
    .ToList();

Может случиться так, что даже ваша плата за обучение не равна стоимости обучения.Вам также понадобится конвертер:

Student.Fee ToStudentFee(this School.Fee schoolFee)
{
    return new Student.Fee()
    {
        Description = schoolFee.Description,
        Amount = schoolFee.Amount,
        DueDate = schoolFee.DueDate,
    };
}
0 голосов
/ 07 февраля 2019

SISBOLibrary.BO.SchoolFee.FeesCollection и SISBOLibrary.BO.Student.FeesCollection - это 2 совершенно разных типа, несмотря на то, что они имеют одинаковые поля.Чтобы назначить paymentlist, вам необходимо сопоставить SISBOLibrary.BO.SchoolFee.FeesCollection с SISBOLibrary.BO.Student.FeesCollection следующим образом

studentObj.FeesCollectionPending = paymentlist
    .Select(p => new SISBOLibrary.BO.Student.FeesCollection { 
        field1 = p.field1,
        field2 = p.field2,
        //and so on
    })
    .ToList(); 

. Или вы можете использовать Automapper для этой цели

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...