Пожалуйста, попробуйте ниже код: конкатенация $ var и $ str с использованием точки (.)
$var = 'variable';
$newvar = "Name\\Branch\\".$var
Отличная работа на MCVE. Я смог призвать SampleMethod
; Оказывается, в этом нет ничего особенного, и это, вероятно, менее сложно, чем вы себе представляли.
В вашем примере, объект, который вы получаете, howToCastThis
, имеет тип, который уже закрыт. Пока вы начинаете с типа этого экземпляра, вам не нужно использовать MakeGenericMethod
.
Допустим, у вас есть экземпляр объекта, compileTimeTypeUnknownInstance
, для параметра, который вы хотите передать SampleMethod
. Поскольку System.IO.TextReader
является абстрактным, compileTimeTypeUnknownInstance
должен быть конкретного, TextReader
-производного типа. При соблюдении этих условий выполняются следующие работы:
var sampleMethod = howToCastThis.GetType().GetMethods()
.Single(mi => mi.Name == "SampleMethod");
sampleMethod.Invoke(howToCastThis, new object[] { compileTimeTypeUnknownInstance });
SampleMethod
сообщает, что T
относится к типу System.Text.TextReader
.
Опять же, howToCastThis
имеет тип с близким построением, поэтому, как и метод, который вы хотите.
Примечание. Хотя это и не тот случай, метод закрытого типа может вводить дополнительные аргументы типа, поэтому вам все равно придется вызывать MakeGenericMethod
для закрытия метода в этом случае.
Теперь, если бы я попытался перевести это в вашу ситуацию, я думаю, это выглядело бы примерно так:
var predictMethod = predictionEngine.GetType().GetMethods()
.Single(mi => mi.Name == "Predict");
float prediction = (float)predictMethod.Invoke(predictionEngine, new object[] { inputValue });
Я не уверен насчет синтаксиса в вашем вызове псевдокода для Predict
. Я предположил, что inputValue
был единственным параметром, а genericInputClass
был только там, чтобы указать, что это был аргумент типа в типе с закрытым построением. Если это неверно, вам нужно выяснить, что на самом деле входит в этот аргумент object[]
.