Zobacz mam takiej sytuacji ...Pass Typ dynamicznie <T>
object myRoledata = List<Roles>() --> (some list or Ienumerable type)
Teraz mam metoda rodzajowa, która tworzy obiekt XML z List<T>
- coś takiego ..
public string GetXML<T>(object listdata)
{
List<T> objLists = (List<T>)Convert.ChangeType(listData, typeof(List<T>));
foreach(var obj in listdata)
{
//logic to create xml
}
}
teraz w celu uruchomienia tej metody muszę zrobić tak:
string xml = GetXML<Roles>(myRoledata);
Teraz nie wiem, co Type
może przyjść do mnie, aby przejść do metody GetXML
. Mam metodę, która będzie wywoływać GetXML
dla różnychs np. Roles
, Users
itp
teraz mogę dostać Type
w List<>
jak ten
Type genericType = obj.GetType().GetGenericArguments()[0];
ale nie może przekazać go jak ten
string xml = GetXML<genericType>(myRoledata);
Czy mimo to, w którym mogę przekazać wszelkie genericTypes
do GetXML
metoda?
Prawdopodobnie chcesz wyjaśnić w pytaniu, czy (prawdopodobnie wiele) rodzajów T są nieznane podczas kompilacji, czy nie. Jeśli są one znane, odpowiedź Ulrika ma sens, tzn. Przestaje rzutować i wymusza typ argumentu (być może z kilkoma przeciążeniami). Jeśli nie jest znana, musisz użyć refleksji, w jakiejś formie, a odpowiedź Marks pokazuje najprostszy i najprawdopodobniej najlepszy sposób, aby to osiągnąć. – ShuggyCoUk