У меня есть метод
public Queryable Query<T>() { }
Теперь я могу вызвать метод, динамически создавая универсальный аргумент T.
примерно так
public Queryable Query<T>() { Query<OtherT>(); }
otherT может бытьтип недвижимости в T.
Спасибо,
Вы можете вызывать универсальные методы динамически, используя отражение, сначала получив определение универсального метода (с помощью Type.GetMethod), затем вызвав MakeGenericMethod и предоставив аргументы типа, затем вызвавInvoke.Однако вы не дали нам достаточно информации, чтобы продолжить, чтобы привести пример.
Type.GetMethod
MakeGenericMethod
Invoke
Попробуйте следующее:
public Queryable Query<T>() { MethodInfo method = GetType().GetMethod("Query"); return (Queryable)method.MakeGenericMethod(typeof(OtherT)).Invoke(this, null); }
Это автоматически закроет метод Query<T> для typeof(OtherT).Вы можете указать требуемый тип здесь.
Query<T>
typeof(OtherT)
Вы не можете. Общий тип параметра должен быть известен во время компиляции. Вот почему мы говорим, что когда мы используем дженерики, это строго типизированный код, потому что типы известны заранее. Когда тип известен только во время выполнения, вы не можете использовать его как универсальный параметр.