Прохождение Generic type - PullRequest
       1

Прохождение Generic type

2 голосов
/ 17 ноября 2010

У меня есть метод

 public Queryable Query<T>()
 {
 }

Теперь я могу вызвать метод, динамически создавая универсальный аргумент T.

примерно так

 public Queryable Query<T>()
 {

    Query<OtherT>();
 }

otherT может бытьтип недвижимости в T.

Спасибо,

Ответы [ 3 ]

4 голосов
/ 17 ноября 2010

Вы можете вызывать универсальные методы динамически, используя отражение, сначала получив определение универсального метода (с помощью Type.GetMethod), затем вызвав MakeGenericMethod и предоставив аргументы типа, затем вызвавInvoke.Однако вы не дали нам достаточно информации, чтобы продолжить, чтобы привести пример.

2 голосов
/ 17 ноября 2010

Попробуйте следующее:

public Queryable Query<T>()
{
    MethodInfo method = GetType().GetMethod("Query");

    return (Queryable)method.MakeGenericMethod(typeof(OtherT)).Invoke(this, null);
}

Это автоматически закроет метод Query<T> для typeof(OtherT).Вы можете указать требуемый тип здесь.

2 голосов
/ 17 ноября 2010

Вы не можете. Общий тип параметра должен быть известен во время компиляции. Вот почему мы говорим, что когда мы используем дженерики, это строго типизированный код, потому что типы известны заранее. Когда тип известен только во время выполнения, вы не можете использовать его как универсальный параметр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...