params
C# 的关键字允许 Array 和 parameter-list 之间等价,不是吗?
遗憾的是,在我的实现中,情况并非如此。
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);
}
}
委托(delegate):
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
完全没用。
有什么建议吗?
最佳答案
为什么要动态调用?您似乎知道所有参数的类型。
简单地调用委托(delegate)有什么问题?
List<Entity> selection = ((Entities)subTypeSelector(
ALMObject.Run.entitiesName(),
(new KeyValuePair<String, object>("testcycle-id", id))
)).entities.ToList<Entity>();
关于c# - 委托(delegate)似乎没有注册 'params',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45032194/