Le problème avec exigeant public, constructeur parameterless ne peut être parce que Populate .GetList l'exige - ie a la contrainte "T: new()". Pour résoudre ce problème, ajoutez simplement la même contrainte à votre méthode.
En fait, je doute que ref
est une bonne stratégie ici. Lors d'une poussée, out
peut faire (puisque vous ne lisez pas la valeur), mais beaucoup plus simple (et plus attendue) option est une valeur de retour:
public IList<T> GetRecords<T>(T dataItem) where T : new()
{ // MG: what does dataItem do here???
return Populate.GetList<T>();
}
Bien sûr, à ce moment-là, l'appelant pourrait Il suffit d'appeler le Populate.GetList
directement!
Je suppose que vous pouvez également supprimer dataItem ... mais la question ne vous le permet pas.
Si vous ne souhaitez pas être générique (et DataItem est l'objet de modèle), vous pouvez le faire via MakeGenericMethod
:
public static IList GetRecords(object dataItem)
{
Type type = dataItem.GetType();
return (IList) typeof(Populate).GetMethod("GetList")
.MakeGenericMethod(type).Invoke(null,null);
}
vous êtes question est très vague et difficile à comprendre .. . Qu'essayez-vous de faire? –
a formaté ma question –
Pourquoi ce type est-il rejeté pour simplement poser une question? –