Hvordan er det lige, jeg kan hive navnet "MinKlasse" ud på en List`1 type?
Jeg kan kun hive ovenstående ud, men synes det er ret grimt at skrive noget regexp, der hiver "MinKlasse" ud. Findes der ikke en property, der kan give mig navnet? Det er fordi, det er alle mine List´1, jeg hiver ud og skal bruge, navnet på typen, man laver en liste på.
foreach (var pi in p.PropertyInfos) { if (Equals(pi.PropertyType.Name, "List`1")) { var test = pi.GetType().GetProperty(pi.Name).ReflectedType.GetGenericArguments(); } }
var allTypes = new List<Type>(); Assembly assemblies = Assembly.LoadFrom(dllName); allTypes = assemblies.GetTypes().ToList();
var propertyInfos = allTypes .Select(f => f.GetProperties()).ToList();
foreach (var p in propertyInfos) { foreach (var pi in p.PropertyInfos) { if (Equals(pi.PropertyType.Name, "List`1")) { var test = pi.PropertyType.GetNestedTypes(); } } }
using System; using System.Collections.Generic; using System.Reflection;
namespace E { public class Data { public int I { get; set; } public string S { get; set; } public List<int> IL { get; set; } public List<string> SL { get; set; } } public class Program { public static void Dump(object o) { foreach(PropertyInfo pi in o.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public)) { Console.WriteLine(pi.Name); if(pi.PropertyType.IsGenericType) { Console.WriteLine(pi.PropertyType.GetGenericTypeDefinition().FullName); foreach(Type t in pi.PropertyType.GetGenericArguments()) { Console.WriteLine(" " + t.FullName); } } else { Console.WriteLine(pi.PropertyType.FullName); } } } public static void Main(string[] args) { Dump(new Data()); Console.ReadKey(); } } }
Det var mere ment som at du skulle poste det hele igen, i stedet for at jeg skal rette en linje her og der.
Reflection er fint nok, når det giver mening og sjovt nok at vide hvad man kan med det. Du har efterhånden også et par sprøgsmål herinde omkring det :-).
"dynamic" kan varmt anbetales da det kan løse mange af de ting man oftest gjorde med Reflection før.
@CodingJoe: Jeg ville også, som Arne nævner ovenfor, også begrænse mængden af strings, fordi det er meget begrænset hvor meget de skal bruges, da de blot introducerer usikkerheder i din kode, fordi ToString f.eks. kunne blive ændret. Ovenstående ville jeg nok rette til:
Ovenstående tester dog kun for om det er af type List<>, men ikke om det er en nedarvning deraf, men det er jo så det næste du kan lege med om du vil håndtere. ;)
Der kan være omkring 2000 grunde til at den er null.
Dog tvivler på samme kode giver null != hjemme og null hjemme.
Kan du ikke teste igen så vi kan udelukke bruger fejl? Lyder i hvert fald mærkeligt at det skulle opføre sig på andre måder.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.