c# - 委托(delegate)似乎没有注册 'params'

标签 c# delegates

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/

相关文章:

c# - 将 Java 代码文档转换为 C#

c# - 如何将委托(delegate)从 c# 转换为 vb.net?

C# - 从工作线程而不是主线程访问时,类字段为空

ios - 未调用 messageComposeViewController didFinishWithResult 委托(delegate)方法

c# - control.BeginInvoke() 调用委托(delegate)失败

c# - Quartz.net - 如何跳到 next_fire_time?

C# 扩展索引器?

ios - 需要将值从我的 tableView 传递到另一个 View 上的标签?

c# - 如何覆盖 TextBox 文本属性

c# - Convert.ChangeType不接受十进制的 "1E-5"科学计数法,如何修复?