2016-01-18 2 views
2

Итак, у меня есть этот класс:GetMethod возвращает нуль

public class tUObject 
{ 
    public const string strSelect = "SELECT Id, cName, Major FROM tUObject WHERE Id = "; 

    //constructors and stuff... 

    public virtual void FillElem(ref List<tUObject> l, DataSet ds) 
    { 
     //... 
    } 
} 

И MainWindow() Я хочу, чтобы добраться до FillElem() помощью GetMethod():

static List<tUObject> obj = new List<tUObject>(); 
static DataSet objDataSet = new DataSet(); 
//... 
string strClass = objDataSet.Tables[0].Rows[0]["Class"].ToString(); //"tUObject" 
Type t = Type.GetType("UniDB_WPF." + strClass); //tUObject with the assembly name 
Type tlist = obj.GetType();      //list<tUObject> 
Type tset = objDataSet.GetType();    //DataSet 

//Getting strSelect from tUObject 
string strAccessSelect = t.GetField("strSelect").GetRawConstantValue().ToString() + ((int)item.Tag).ToString(); 
//... 
//Getting FillElem from tUObject 
MethodInfo mi = t.GetMethod("FillElem", BindingFlags.Public, null, new[] { tlist, tset }, null); 

Проблема заключается в том, GetMethod() возвращает нуль, в то время как GetField() работает отлично. tlist и tset не являются нулевыми и возвращают «List'1» и «DataSet» соответственно. Так почему это происходит?

+0

следует, что 'tlist' аргумент может быть немного отличаться, видя, что тип первого аргумента НЕ' 'Список , но' исх Список '' –

+0

Пробовал tlist.MakeByRefType() ', ничего не изменилось. – dasgluk

+0

Что ДОЛЖНО сделать трюк ... –

ответ

2

Попробуйте это:

//Getting FillElem from tUObject 
MethodInfo mi = t.GetMethod("FillElem", BindingFlags.Public | BindingFlags.Instance, null, new[] { tlist.MakeByRefType(), tset }, null); 
+0

Это, к сожалению, не изменило ситуацию. – dasgluk

+0

По какой-то причине ваше решение не сработало, пока я не заново открыл свой проект после создания быстрого примера «GetMethod()», где он работал, и вставил ваш код. Я постараюсь понять, что произошло и почему это не сработало раньше. Спасибо! – dasgluk

2

ответ Memoizer должен работать. Следующий код возвращает правильные данные:

public class Test 
{ 
    public virtual void Test1(ref List<object> t1, object t2) 
    { 

    } 
} 

и метод запроса

var t = new Test(); 
var mi = t.GetType().GetMethod("Test1", BindingFlags.Instance | BindingFlags.Public, null, new Type[] { typeof(List<object>).MakeByRefType(), typeof(object) }, null); 

enter image description here

Так что вам нужно искать другую проблему. Вы уверены, что передаете правильные типы?

+0

Я сделал быстрый пример «GetMethod()» на основе вашего кода, и он сработал. Затем я снова открыл свой проект и скопировал ответ Memoizer с 'BindingFlags.Instance' и ... он сработал. Я все это сбиваю с толку. Но спасибо вам в любом случае. – dasgluk

 Смежные вопросы

  • Нет связанных вопросов^_^