Feedback

C# - Reflektion und Generika

Veröffentlicht von am 11/20/2008
(2 Bewertungen)
Mit diesem Beispiel will ich zeigen wie einfach mittels Reflektion eine generische Liste erstellt werden kann.

Reale Verwendung zB wenn bei LINQ to SQL gespeicherte Prozeduren über den Namen - also über Reflektion - ausgeführt werden um das Ergebnis in das ISingleResult<T> zu wandeln.
using System;
using System.Collections.Generic;

namespace Reflection_and_Generics
{
	class Program
	{
		static void Main(string[] args)
		{
			// Basistyp ermitteln:
			Type baseType = typeof(List<>);

			// Typargumente erstellen:
			Type[] typeArgs = { typeof(string) };

			// Generischen Typ erstellen:
			Type genericType = baseType.MakeGenericType(typeArgs);

			// Objekt erstellen:
			object o = Activator.CreateInstance(genericType);

			List<string> list = o as List<string>;

			Console.WriteLine(list == null ? "Fehler" : "Erfolg");
			Console.ReadKey();
		}
	}
}
Abgelegt unter Reflektion, Generika, Reflection, Generics.

2 Kommentare zum Snippet

zoran schrieb am 8/25/2009:
Hallo Foidl,

danke für Beispiel aber ich bin anf'nger in C# comunity und ich verstehe nicht wie kann man eine Liste oder besser IList mit beliebige Typ Instanzirren? In dein Beispiel es geht um List<string> oder? Wie kann man eine IList<MyClass> Liste generieren ?

Danke!
ZM.
Günther Foidl schrieb am 8/28/2009:
Hallo,
siehe http://openbook.galileocomputing.de/visual_csharp/.
Im Beispiel gehts um die generische Variante einer Liste nämlich um List<string>. Da List<T> die Schnittstellte IList<T> implementiert wurde so eine Liste und mit dem gleichen Objekt eine IList<T> erzeugt. Solltest du das nicht verstehen dann sieh dir obigen Link an - da werden diese Grundlagen sehr gut erklärt.
 

Logge dich ein, um hier zu kommentieren!