公共 bool 方法不能将类型“bool”隐式转换为“void”

Posted

技术标签:

【中文标题】公共 bool 方法不能将类型“bool”隐式转换为“void”【英文标题】:public bool method Cannot implicitly convert type `bool' to `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,并且当回调确实被调用时,什么都不会发生。 是的,我正在考虑,我必须做一些测试,看看结果如何。 【参考方案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);

【讨论】:

以上是关于公共 bool 方法不能将类型“bool”隐式转换为“void”的主要内容,如果未能解决你的问题,请参考以下文章

无法将类型“void”隐式转换为“bool”Xamarin 警报

windows编程问题 错误提示“int无法隐式转换为bool”

在构造 std::variant 时禁用从指针类型到 bool 的隐式转换的最佳方法是啥?

C#中提示无法将string隐式转换为bool类型,请问怎么办?

向启用文本框 (C#) 的 Web 部件添加按钮,出现错误:无法将类型“bool”隐式转换为“字符串”

C++,bool 转换是不是总是退回到 void* 的隐式转换?