Предполагая, что RegionModel
& SecteurDActiviteModel
будет иметь общие свойства Id
& Nom
, я бы посоветовал вам создать ISomeInterface
и реализовать его для ваших типов RegionModel : ISomeInterface
.Нет необходимости возвращать фактический тип, как вы делаете - result = new SimpleGenericModel();
- тип будет известен во время компиляции по T
, который вы передаете методу.
С новым интерфейсом вы можете ограничитьметод еще больше похож на этот:
public T GetSimpleModelFromMultiNode<T> (FicheArticleViewModel model, string alias) where T: new(), ISomeInterface,
Итак, ваша структура должна выглядеть так:
public T GetSimpleModelFromMultiNode<T>(string model, string alias) where T : ISomeInterface, new()
{
var listeItems = CurrentPage.GetPropertyValue<IEnumerable<IPublishedContent>>(alias);
var result = new T();
if (!CurrentPage.HasValue(alias)) return result;
foreach (var item in listeItems)
{
result.Id = item.Id.ToString();
result.Nom = item.Name;
}
return result;
}
public interface ISomeInterface
{
int Id { get; set; }
string Nom { get; set; }
}
public class RegionModel : ISomeInterface
{
//Your implementation goes here
}
public class SecteurDActiviteModel : ISomeInterface
{
//Your implementation goes here
}
Еще одна вещь: вы снова и снова сопоставляете один и тот же объект с одними и теми же свойствами, что не имеет смысла, если вы хотите получить коллекцию T
из listeItems
.Вы должны изменить свой код следующим образом:
public IEnumerable<T> GetSimpleModelFromMultiNode<T>(string model, string alias) where T : ISomeInterface, new()
{
var listeItems = CurrentPage.GetPropertyValue<IEnumerable<IPublishedContent>>(alias);
if (!CurrentPage.HasValue(alias)) return Enumerable.Empty<T>();
return listeItems.Select(i => new T
{
Id = i.Id.ToString(),
Nom = i.Name,
});
}
РЕДАКТИРОВАТЬ:
Если ваши listeItems будет иметь одно значение, просто сделайте FirstOrDefault()
или SingleOrDefault()
чтобы получить предмет и карту, как это:
public T GetSimpleModelFromMultiNode<T>(string model, string alias) where T : ISomeInterface, new()
{
var listeItem = CurrentPage.GetPropertyValue<IEnumerable<IPublishedContent>>(alias).FirstOrDefault();
if (!CurrentPage.HasValue(alias)) return new T();
if (listeItem == null)
{
return new T();
}
return new T
{
Id = listeItem.Id.ToString(),
Nom = item.Name
};
}