Хотя 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,
};
}