Я получаю List<KeyValuePair<Parameter, string>>
(параметр - Enum). Теперь я всегда получаю 15 из этих ListItems, те, которые не нужны, являются нулевыми или пустыми. С этими значениями (строковая часть пары) я должен заполнить различные запросы API. Относительно конечных точек API некоторые значения имеют разные имена, но имеют одно и то же значение. Поэтому мне пришлось бы изменить некоторые значения. Я делал это до сих пор:
public void CreateRequest(ApiEndpoints endpointType, string endpointName, List<KeyValuePair<Parameters, string>> parameters)
{
List<KeyValuePair<string, string>> parameterList = new List<KeyValuePair<string, string>>();
switch(endpointType)
{
case ApiEndpoints.Model:
string modelId = parameters.Where(k => k.Key == Parameters.Model).Select(k => k.Value).FirstOrDefault();
if(!string.IsNullOrWhiteSpace(modelId))
{
parameterList.Add(new KeyValuePair<string, string>("id", modelId));
}
break;
case ApiEndpoints.Group:
string groupId = parameters.Where(k => k.Key == Parameters.Group).Select(k => k.Value).FirstOrDefault();
modelId = parameters.Where(k => k.Key == Parameters.Model).Select(k => k.Value).FirstOrDefault();
if (!string.IsNullOrWhiteSpace(groupId))
{
parameterList.Add(new KeyValuePair<string, string>("id", groupId));
}
if (!string.IsNullOrWhiteSpace(modelId))
{
parameterList.Add(new KeyValuePair<string, string>("modelId", modelId));
}
break;
...
}
}
private string QueryBuilder(List<KeyValuePair<string, string>> parameters)
{
string query = string.Empty;
bool firstItem = true;
foreach(var parameter in parameters)
{
if (firstItem)
{
query += "?";
firstItem = false;
}
else
{
query += "&";
}
query += parameter.Key + "=" + parameter.Value;
}
return query;
}
Это отчасти необходимо, потому что ID модели иногда используется как «id», а иногда как «ModelId», в зависимости от конечной точки.
КакВы можете видеть, что обработка параметров становится все более объемной. Некоторые конечные точки имеют до 8 необязательных параметров. И мы (до сих пор) на 21 конечной точке. Но есть и другие. Так что будет действительно неясно пропустить этот код. У кого-нибудь есть идея, как сократить / выровнять этот код? (15 KeyValuePairs исправлены. Я не могу это изменить. Только моя обработка.
Возможно ли изменить строку внутри .Select в лямбда-выражении? Таким образом, каждый параметр будет уменьшен до одной строки.