Я ищу способ выполнить интерполяцию строки, но где строка шаблона находится в переменной раньше времени, а не использовать true интерпретацию строки, где $ "{a} {b} "немедленно параметризуется и возвращается.
Есть множество мест, которые были бы полезны, но в качестве наиболее яркого примера я пишу конвейер ETL (Extract Transform Load), в котором есть десятки различных REST API, которые мне нужны ударить. Одни и те же два аргумента встречаются в разных URI неоднократно, и я хотел бы динамически заменить их значениями, предоставленными пользователем. Два таких примера перечислены ниже.
Это может быть легко выполнено с помощью интерполяции строк, если у меня есть значения, доступные во время выполнения, например, "
int projectId = 1;
int uploadId = 3;
string uri = $"http://www.example.com/project/{projectId}/data?uploadId={uploadId}";
/* evaluates to "http://www.example.com/project/1/data?uploadId=1" */
Однако я хочу построить поднимите эти параметризованные строки на раньше времени и сможете заменить их теми переменными, которые у меня есть в этом контексте. Другими словами, в псевдокоде:
int projectId = 1;
int uploadId = 3;
string uriTemplate = "http://www.example.com/project/{projectId}/data?uploadId={uploadId}";
string uri = ReplaceNameTags(uriTemplate, projectId, uploadId)
// example method signature
string ReplaceNametags(uriTemplate, params object[] args)
{
/* insert magic here */
}
Отражение пришло на ум, может быть, я мог бы как-то собрать названия входов, но я не так хорош с рефлексией, и все мои попытки оказываются гораздо более сложными, чем если бы я вообще отказался от идеи.
String.Format()
пришло на ум, но в идеале я не был бы ограничен порядковым положением предоставленных аргументов.
Я видел это поведение повсеместно (например, RestSharp, Swagger, ASP. NET Маршрутизация), но я не уверен, как подражать.
Спасибо!