【问题标题】:public bool method Cannot implicitly convert type `bool' to `void'公共 bool 方法不能将类型“bool”隐式转换为“void”
【发布时间】:2014-07-29 00:54:01
【问题描述】:

我正在为我的 android 游戏实现 google play sdk,到目前为止,我已经完成了登录和排行榜部分,但添加成就给我带来了一些麻烦,因为我使用 public bool 方法让我的生活更轻松,以便将来更新并标记成就解锁。

由于某种原因,我收到此错误: 无法隐式转换类型bool' tovoid'

public bool unlockAchievement(string achievementName, string achievementID) {
    if(loggedIn == true) {
        Social.ReportProgress(achievementID, 100.0f, (bool success) => {
            return success;
        });
    }
    else return false;
}

我想我涵盖了任何松散的结局,但我得到了这个错误。

感谢任何帮助。 谢谢。

编辑:

看起来像这样工作

public bool unlockAchievement(string achievementName, string achievementID) {
    bool actionDone = false;
    if(loggedIn == true) {
        Social.ReportProgress(achievementID, 100.0f, (bool success) => {
            if(success) actionDone = true;
            else actionDone = false;
        });
        return actionDone;
    }
    else return actionDone;
}

谢谢

【问题讨论】:

  • 请注意,您编辑中的解决方案仅在传递给 Social.ReportProgress 的回调同步运行时才有效。如果在 ReportProgress 返回之前没有立即调用该方法,则 actionDone 将保持为 false,并且当回调确实被调用时,什么都不会发生。
  • 是的,我正在考虑,我必须做一些测试,看看结果如何。

标签: c# android unity3d google-play-games


【解决方案1】:

您的 lambda 是一个封闭的方法,因此 return 语句的上下文是 lambda 方法,而不是 unlockAchievement

您可能希望重构代码以使用回调,即类似这样的内容:

public void unlockAchievement(string achievementName, string achievementID, Action<bool> callback) {
    if(loggedIn == true) {
        Social.ReportProgress(achievementID, 100.0f, (bool success) => {
            callback(success);
        });
    }
    else callback(false);
}

【讨论】:

    猜你喜欢
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多