У меня есть 3 разных таблицы базы данных, которые имеют одинаковые 5 полей, но у них нет отношения внешнего ключа, поскольку они не сохраняют одинаковое значение на самом деле, но эквиваленты; как: таблица CompanyA имеет productA и CompanyB имеет продуктB.Использовать только один метод, который принимает разные типизированные параметры
поэтому у меня есть 3 разных коллекции, которые включают 3 поля, которые эквивалентны. Поэтому я хотел бы использовать один класс с свойствами companyType и ProductName и использовать только один метод, чтобы отнести эти 3 разных коллекции к одному объекту класса, например ResultClass.
public class ResultClass
{
public EnumCompanyType CompanyType { get; set; }
public string ProductName { get; set; }
public ICollection<ResultClass> ConvertAnything(ICollection<T> collection)
{
//Cast it to ResultClass
return resultClassCollection;
}
}
Так что я могу использовать это как:
ICollection<ProductA> aCollection = GetCompanyAData();
ICollection<ProductB> bCollection = GetCompanyBData();
ConvertAnything(aCollection);
ConvertAnything(bCollection);
Я пытался «динамический», но на самом деле не знаю, принцип (ни есть знания); так что я испортил его, и я думаю, что это не для этого.
Я попытался создать метод расширения, но так как расширение не имеет типа для его параметра (как он использует ICollection), я не могу получить доступ к полям элементов (например, свойство)
Я использую LinqToSql, и все термины таблицы базы данных и т. Д. Относятся к этой концепции, и ничего больше.
редактировать:
Я думаю, что должен я ясно: The несколько экземпляров, которые я пытаюсь избежать (или не должен я, не думая) как ниже
public ICollection<ResultClass> ConvertAnythingForA(ICollection<ProductA> collection)
{
foreach(var item in collection)
{
var result = new ResultClass
{
ProductName = item.ProductA,
ProductType = EnumProductType.ProductA
};
resultClassCollection.Add(result);
}
return resultClassCollection;
}
public ICollection<ResultClass> ConvertAnythingForB(ICollection<ProductB> collection)
{
foreach(var item in collection)
{
var result = new ResultClass
{
ProductName = item.ProductB,
ProductType = EnumProductType.ProductB
};
resultClassCollection.Add(result);
}
return resultClassCollection;
}
Спасибо заранее.
Ура для дженериков! :) –
Да, я пробовал это, как я объяснил в вопросе, но так как это будет общий, я не могу получить доступ к свойствам; как коллекция [0] .ProductName! И они не имеют точно такой же структуры, они имеют именованные по-разному столбцы с эквивалентными значениями –
Вот причина ограничения типа. Если вы ограничиваете его интерфейсом, вы можете получить доступ к чему-либо, определенному в интерфейсе. – Japple