Type.FindMembers и Extension methods
От: Johny B.Good Россия  
Дата: 26.06.08 12:45
Оценка:
Всем привет!

У меня есть определенный в моей сборке extension для Int32. Я пытаюсь в коде из этой же сборки найти его через рефлекшн с помощью Type.FindMembers, и не нахожу.

Как его находит IntelliSence? Кто-нибудь пробовал так делать?

Заранее спасибо!
findmembers reflection extension methods
Re: Type.FindMembers и Extension methods
От: rameel https://github.com/rsdn/CodeJam
Дата: 26.06.08 13:48
Оценка:
Здравствуйте, Johny B.Good, Вы писали:

JBG>У меня есть определенный в моей сборке extension для Int32. Я пытаюсь в коде из этой же сборки найти его через рефлекшн с помощью Type.FindMembers, и не нахожу.


Курить доки
10.IsZero()

транслируются компилятором в
класс_с_расширением.IsZero(10)


Соответственно этот метод и нужно искать А как это делает интиллисенс, то курим доку по ExtensionAttribute
... << RSDN@Home 1.2.0 alpha 4 rev. 1090 >>
Re: Type.FindMembers и Extension methods
От: nikov США http://www.linkedin.com/in/nikov
Дата: 27.06.08 07:56
Оценка:
Здравствуйте, Johny B.Good, Вы писали:

JBG>У меня есть определенный в моей сборке extension для Int32. Я пытаюсь в коде из этой же сборки найти его через рефлекшн с помощью Type.FindMembers, и не нахожу.


А в каком типе ищешь? Если в Int32, то не найдешь. Надо его искать в том классе, где находится его декларация.
Extension метод не является членом того класса, через экземпляр которого он вызывается. Более того, множество доступных extension методов зависит от того, какие сборки подключены, и какие пространства имен открыты через директивы using.

JBG>Как его находит IntelliSence?


Студийный IntelliSense, думаю, не через Type.FindMembers.
Re[2]: Type.FindMembers и Extension methods
От: Johny B.Good Россия  
Дата: 27.06.08 11:04
Оценка:
Здравствуйте, rameel, Вы писали:

R>Здравствуйте, Johny B.Good, Вы писали:


JBG>>У меня есть определенный в моей сборке extension для Int32. Я пытаюсь в коде из этой же сборки найти его через рефлекшн с помощью Type.FindMembers, и не нахожу.


R>Курить доки

R>
R>10.IsZero()
R>

R>транслируются компилятором в
R>
R>класс_с_расширением.IsZero(10)
R>


Спасибо, метод в нужном классе я нашел, но проблема осталась Ситуация такая — я пытаюсь вызвать этот extension метод с помощью лямбда выражений (метод Expression.Call( instance, method, arguments )), но получается, что instance у меня нет, а есть статический класс. Каким образом можно передать статический класс в Expression? Может быть, есть какие-то рекомендации как вообще работать с extension-методами в Expression?
Re[3]: Type.FindMembers и Extension methods
От: nikov США http://www.linkedin.com/in/nikov
Дата: 27.06.08 11:13
Оценка:
Здравствуйте, Johny B.Good, Вы писали:

JBG>Спасибо, метод в нужном классе я нашел, но проблема осталась Ситуация такая — я пытаюсь вызвать этот extension метод с помощью лямбда выражений (метод Expression.Call( instance, method, arguments )), но получается, что instance у меня нет, а есть статический класс. Каким образом можно передать статический класс в Expression?


using System;
using System.Linq.Expressions;

static class Program
{
    static void Foo(this int x, string y){}
    static void Main()
    {
        Expression<Action> exp = () => 1.Foo(""); // и посмотреть, что получилось
    }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.