C#的params
关键字允许数组和参数列表等价,不是吗?代表似乎没有注册'参数'
不幸的是,在我的实施中,情况并非如此。
private Entities queryType(String entitiesType, params KeyValuePair<String, object>[] values)
{
addStandardHeaders();
String query = parsePredicate(values);
Task<HttpResponseMessage> filterTask = client.GetAsync(client.BaseAddress + RESTapi.ALMentitiesQuery(domain, project, entitiesType, query));
Task.WaitAny(filterTask);
//Callback:
HttpResponseMessage result = filterTask.Result;
if (result.IsSuccessStatusCode)
{
updateCookies(client.BaseAddress+RESTapi.ALMentitiesQuery(domain, project, entitiesType, query));
mainHeaders.Clear();
Task<Stream> output = result.Content.ReadAsStreamAsync();
Task.WaitAny(output);
//Callback:
return (Entities)fromJSON(output.Result, typeof(Entities));
}
else
{
util.Exception exception = getException(result);
throw new HttpException(exception.Title);
}
}
委托:
public delegate Entities SubTypeQuery(String subType, params KeyValuePair<String, object>[] values);
在应用:
public List<Run> getRuns()
{
List<Entity> selection = ((Entities)subTypeSelector.DynamicInvoke(
ALMObject.Run.entitiesName(),
(new KeyValuePair<String, object>("testcycle-id", id))
)).entities.ToList<Entity>();
List<Run> runSet = new List<Run>();
foreach (Entity element in selection)
runSet.Add(new Run(element, subTypeSelector));
return runSet;
}
在运行时,我得到一个类型的异常: “无法转换KeyValuePair<String, object>
到KeyValuePair<String, object>[]
”。这使得params
完全无用。 建议?
请把它降低到[mcve]。你提供的大多数代码都是不相关的,你没有告诉我们问题出在哪里。使用'KeyValuePair'而不是更简单的类型也使得它比它需要更复杂。 (我也强烈建议你开始遵循.NET的命名约定。) –