cho*_*bo2 7 c# dynamic callback
我一直收到这个错误,不知道如何纠正它
错误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)
{
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 12
问题是这个调用是动态的:
userService.SignIn(openId, email, Callback);
Run Code Online (Sandbox Code Playgroud)
它必须是,因为openId并email推断出类型dynamic:
var openId = meResult.id;
var email = meResult.emails.preferred;
Run Code Online (Sandbox Code Playgroud)
您不能在动态调用中使用这样的方法组转换 - 这只是使用的限制之一dynamic.
所以,选项:
给定openId和email显式类型(如果userService不是dynamic)将使调用非动态,方法组转换将起作用.这只是意味着明确指定类型,因为可以从dynamic以下位置获得隐式转换:
string openId = meResult.id;
string email = meResult.emails.preferred;
userService.SignIn(openId, email, Callback);
Run Code Online (Sandbox Code Playgroud)如果要保持呼叫动态,请从方法创建特定的委托类型实例:CallbackSignIn
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));
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
2053 次 |
| 最近记录: |