ist es möglich, mit Reflektion eine Methode mit "Explict Typ Argument" <S>
Definition
z. oObject.Cast<S>()
?So rufen Sie eine generische Methode durch Reflexion
wo ist:
IList <P> oObject = new List <P>();
Ich habe versucht, mit
oObject.getType().InvokeMember("Cast", BindingFlags.InvokeMethod, null, oObject, null)
aber es funktioniert nicht, weiß jemand, warum?
Hier ist der vollständige Testcode, aber es funktioniert immer noch nicht. Die letzte Zeile erzeugt immer Ausnahme. Ist es möglich, dass es funktioniert?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace reflection_tester
{
class CBase
{
public string Ja = "I am the base";
}
class MyClass01 : CBase
{
public string _ID;
public string ID
{
get { return _ID; }
set { _ID = value; }
}
}
class Program
{
public static object wrapper()
{
//return a list of classes MyClass01
IList<MyClass01> lstClass01 = new List<MyClass01>();
MyClass01 oClass01a = new MyClass01();
oClass01a.ID = "1";
MyClass01 oClass01b = new MyClass01();
oClass01b.ID = "2";
lstClass01.Add(oClass01a);
lstClass01.Add(oClass01b);
return lstClass01;
}
static void Main(string[] args)
{
MyClass01 oMy1 = new MyClass01();
oMy1._ID = "1";
MyClass01 oMy2 = new MyClass01();
oMy2._ID = "3";
IList<MyClass01> oListType01 = new List<MyClass01>();
oListType01.Add(oMy1);
oListType01.Add(oMy2);
object oObjectType = new object();
oObjectType = oListType01;
/* this works */
IEnumerable<CBase> enumList = oListType01.Cast<CBase>();
MethodInfo mInfo = typeof(System.Linq.Enumerable).GetMethod("Cast", new[] { typeof(System.Collections.IEnumerable) }).MakeGenericMethod(typeof(CBase));
/* this does not work, why ? throws exception */
IEnumerable<CBase> enumThroughObject = (IEnumerable<CBase>)mInfo.Invoke(oObjectType, null);
return;
}
}
}
Aufrufen Funktion nimmt keinen Parameter so, wenn ich zweiten Parameter als "null" setze, bekomme ich Ausnahme. irgendeinen Hinweis warum? – milan
Ausnahme ist: Ungültige Anzahl von Parametern. – milan
'Enumerable.Cast()' nimmt keine "Argumente". Das Argument, das in diesem Fall angegeben wird, ist das Objekt, das Sie die Erweiterungsmethode Anwenden aufrufen möchten. –
user7116