Feedback

C# - Generic Type Creator

Veröffentlicht von am 07.02.2008
(2 Bewertungen)
Angenommen es wird zu weiteren Verarbeitung ein Dictionary vom Typ Dictionary<Guid, T> benötigt. Damit der Aufruf allerdings komfortabler ist soll es die möglichkeit geben die Daten in Form einer IList<T> an die Methode zu übergeben, dann kann folgendes Snippet helfen
GFU-Schulungen  [Anzeige]

Visual Studio Team Foundation Server 2017/2015 (TFS) für Administratoren - Kompakt

Nach dieser Schulung beherrschen Sie die Grundlagen des TFS. Sie erledigen administrative Aufgaben schnell und sicher.

JavaScript für .NET-Entwickler

Sie sind .NET-Entwickler und nun stehen Sie vor der Aufgabe, JavaScript in Ihre Arbeit einzubinden. Die Schulung vermittelt Ihnen die JavaScript Grundlagen und die Funktionen der Scriptsprache. Sie wissen, wie objektorientierte Programmierung in JavaScript funktioniert und lernen abschließend Best Practicies Fälle kennen.

// aufruf
        public void testRun()
        {
            IList<int> var = new List<int>();
            TestMethod(var);
        }
        public void TestMethod(object var)
        {
            if (var.GetType().IsGenericType)
            {
                Type[] t = var.GetType().GetGenericArguments();
                Type typeToGenerate = typeof(Dictionary<,>);
                Type[] tParameters = new Type[] { typeof(Guid), t[0] };
                Type newType = typeToGenerate.MakeGenericType(tParameters);
                object obj = Activator.CreateInstance(newType);
            }
            else
            {
                throw new InvalidCastException("Wrong type");
            }
            // do something with the new Dictionary...
        }
Abgelegt unter Generics, Reflection.

3 Kommentare zum Snippet

Rainer Schuster schrieb am 07.02.2008:
Ein object als Parameter in einem Generic ist meiner Meinung nach Themaverfehlung ...
spooky schrieb am 08.02.2008:
IList<int> kann man schonmal nicht nach IList<object> casten, von daher geht der Aufruf aus testRun() nicht --> TestMethod(object var) muss es heissen.


public static void Test<T>(IList<T> list)
{
Dictionary<Guid, T> dict = new Dictionary<Guid, T>();
}
Thorsten Hans schrieb am 08.02.2008:
Hallo,
sorry stimmt leute ich korrigiere das Ganze mal zunächst so dass es passt.
 

Logge dich ein, um hier zu kommentieren!