【问题标题】:How to do Callbacks with Dynamic?如何使用动态进行回调?
【发布时间】:2014-03-17 21:57:51
【问题描述】:

我不断收到此错误,不知道如何纠正它

错误 1 ​​不能使用“回调”作为动态参数 调度操作,因为它是一个方法组。你打算 调用方法?

    //...
    if (e.Status == LiveConnectSessionStatus.Connected)
    {              
        client = new LiveConnectClient(e.Session);
        LiveOperationResult operationResult = await client.GetAsync("me");
        try
        {

            dynamic meResult = operationResult.Result;

            var openId = meResult.id;
            var email = meResult.emails.preferred;
            //MessageBox.Show(openId);
            //MessageBox.Show(email);
           userService.SignIn(openId, email, Callback);


        }
        catch (LiveConnectException exception)
        {
            MessageBox.Show("Error calling API: " + exception.Message);
        }
    }
}

private void Callback(ErrorModel error)
{
    if (error != null)
    {
        MessageBox.Show(error.FriendlyErrorMsg, error.Caption, MessageBoxButton.OK);
    }
    else
    {

    }
}

public void SignIn(string id, string email, Action<ErrorModel> callBack)
{

}

【问题讨论】:

  • userService.SignIn的签名是什么?

标签: c# dynamic callback


【解决方案1】:

问题是这个调用是动态的:

userService.SignIn(openId, email, Callback);

必须是,因为openIdemail 被推断为dynamic 类型:

var openId = meResult.id;
var email = meResult.emails.preferred;

你不能在动态调用中使用这样的方法组转换——这只是使用dynamic的限制之一。

所以,选项:

  • 给出openIdemail 显式类型,这(如果userService 不是dynamic)将使调用成为非动态的,方法组转换将起作用。这只是意味着明确指定类型,因为dynamic 提供了一个隐式转换:

    string openId = meResult.id;
    string email = meResult.emails.preferred;
    userService.SignIn(openId, email, Callback);
    
  • Callback 方法创建一个特定 委托类型实例,如果您想保持SignIn 调用动态:

    var openId = meResult.id;
    var email = meResult.emails.preferred;
    // Or use whichever delegate type is actually appropriate for SignIn
    userService.SignIn(openId, email, new Action<ErrorModel>(Callback));
    

【讨论】:

    猜你喜欢
    • 2014-06-21
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 2019-01-19
    • 2022-06-12
    • 1970-01-01
    • 2020-03-27
    相关资源
    最近更新 更多