2

我想将回调方法作为参数传递给通用方法,但不知道该怎么做。我试过了,Func<IAsyncResult>但它似乎不兼容。

public void webRequest(string apiName, string requestMethod, string requestData, Func<IAsyncResult> callback)
{
    ...
    request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);
}

回调的签名是:

void GetRequestStreamCallback(IAsyncResult asyncResult)
4

2 回答 2

4

将参数声明为,Action<T>而不是Func<T>

public void webRequest(string apiName, string requestMethod, string requestData, Action<IAsyncResult> callback)

Func<IAsyncResult>需要一个不带参数并返回IAsyncResult实例的函数:

Func<TResult>代表

封装没有参数的方法,并返回参数指定类型的值TResult

Action<T>不返回任何东西,只接受参数:

Action<T>代表

封装具有单个参数且不返回值的方法。

于 2013-10-10T08:00:45.717 回答
2

BeginGetRequestStream 需要 AsyncCallback 类型的参数。因此,将回调参数声明为该类型。

public void webRequest(string apiName, string requestMethod, 
    string requestData,  AsyncCallback callback)
{
    ...
    request.BeginGetRequestStream(callback, request);
}

然后您可以传递您的回调方法,因为它与所需的签名匹配。

webRequest(apiName, requestMethod, requestData,
    GetRequestStreamCallback);
于 2013-10-10T08:13:32.200 回答