можно вызвать с отражением метод с аргументом «explict type» <S>
определение
например. oObject.Cast<S>()
?Как вызвать общий метод с помощью отражения
где:
IList <P> oObject = new List <P>();
Я попытался с
oObject.getType().InvokeMember("Cast", BindingFlags.InvokeMethod, null, oObject, null)
, но он не работает, кто-нибудь знает почему?
Полный код проверки, но при этом он не работает. В последней строке всегда возникает исключение. Можно ли заставить его работать?
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;
}
}
}
Функция invoke не принимает один параметр, поэтому, если я ставлю второй параметр как «null», я получаю исключение. подскажите почему? – milan
Исключение составляет: Недопустимое количество параметров. – milan
'Enumerable.Cast()' не принимает никаких «аргументов». Аргументом, приведенным в этом случае, является объект, который вы хотите вызвать методом расширения. –
user7116