我得到一个List<KeyValuePair<Parameter, string>>
(参数是一个枚举)。现在,我总是得到15个这些ListItem,不需要的为null或为空。使用这些值(该对的字符串部分),我必须填充不同的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;
}
这是部分必要的,因为根据端点,有时会将modelId用作“ id”,有时又用作“ modelId”。如您所见,参数处理变得越来越庞大。某些端点最多具有8个可选参数。我们(到现在)有21个端点。但是还有更多。因此,忽略此代码将变得非常不清楚。有谁知道如何缩短/展平此代码? (这15个KeyValuePair是固定的。我无法更改它。仅是我的处理。是否有可能在lambda表达式中的.Select内更改字符串?这样,每个参数将减少为一行。
我不确定我是否完全理解问题,但是如果这是CreateRequest