Поддерживает ли C # Scripting API интерполяцию параметров? - PullRequest
0 голосов
/ 15 мая 2018

Например, у меня есть такой фрагмент кода:

string id = {id};
State state = State.observed;
HttpWebResponse response = proxyClient.ChangeState(id, state);
if (response.StatusCode != HttpStatusCode.OK)
{
    // handling error
}

Я хочу интерполировать {id} к реальному значению во время выполнения, прежде чем передать его CSharpScript, я не хочу определятьGlobal класс для инкапсуляции всех параметров, как показано в примере кода, могу ли я это сделать?Должен ли я обернуть фрагмент в функцию C #?Мой второй вопрос заключается в том, что функция ChangeState находится в другой сборке. Как указать скриптовому API C # на загрузку этой сборки?

Редактировать: история, связанная с этим небольшим странным вопросом, заключается в том, что я разрабатываю рабочий процессприложение, и я хочу создать класс активности, может взять кусок кода C # из файла конфигурации и запустить его, но для кода обычно требуются входные аргументы, значения которых определяются только из родительской активности, поскольку теперь все входные аргументы являются строками.

1 Ответ

0 голосов
/ 15 мая 2018

Я думаю, что вам понадобится лямбда, которая принимает параметр в этом случае.

Есть два основных типа, которые вы хотели бы рассмотреть;Действие и Функ.Типы действий не возвращают никаких переменных, а типы Func имеют возвращаемые типы.Вы можете создавать шаблоны для них, что делает их более гибкими.

Вы можете создавать их во время выполнения и редактировать их в соответствии со своими потребностями.Так что, если вы находитесь в большом цикле и у вас есть какая-то функция, которую вам нужно настроить, вы можете изменить вход и выход по мере продвижения по ней с помощью простого назначения переменных.


Action<string> idCheckAction = (string _id) =>
{
    Console.WriteLine("ID = " + _id);
};

Func<string, string> idCheckFunc = (string _id) =>
{
    return "ID = " + _id;
};

idCheckAction("123"); // "ID = 123"

string concat = idCheckFunc("123"); 
Console.WriteLine(concat); // "ID = 123"

Нечто подобное можно использовать для ведения журнала консоли, поскольку вы можете сохранить список строковых значений + значения Action / Func и оттуда вызывать эти функции через ключевое слово или итератор.

И наТема сборки сборки, я считаю, что простой using (X) будет достаточно.Вы можете проверить, какие ресурсы у вас есть, зайдя в Visual Studio, посмотрев справа в обозревателе решений и проверив ваши ссылки.Вы можете добавить их прямо из файла, не беспокойтесь.Вам нужно было бы разобраться, как загружать сборки, но я думаю, что это возможно с помощью Reflection, но не указывайте мне на это.

...