使用if语句返回bool

本文关键字:bool 返回 语句 if 使用 | 更新日期: 2023-09-27 18:24:23

我的代码需要一些帮助,因为它总是返回false,使用C#XNA 4.0

在我的Game1.cs上,我运行此代码

if (!Connection.sendPacketBool("Check", versionPacket))
        {
            Connection.closeConnection();
            this.Exit();
        }

在我的班级连接上,我有一个

public static bool final;
public static bool sendPacketBool(String type, String data)
    {
        try
        {
            NetworkComms.SendObject(type, serverIp, serverPort, data);
            NetworkComms.AppendGlobalIncomingPacketHandler<string>("ClientV",
           (header, connection, array) =>
           {
               if (array == "false")
               {
                   final = false;
               }
               else
               {
                   final = true;
               }
           });
        }
        catch (Exception ex)
        {
        }
        if (!final)
        {
            return false;
        }
        else
        {
            return true;
        }
    }

除非我做,否则最终结果总是错误的

        public static bool final = true;

如何更改此代码以使其返回true或false?我不能做

if (array == "false")
               {
                   final = false;
                   return false;
               }
               else
               {
                   final = true;
                   return true;
               }

由于我得到错误

NetworkComms.AppendGlobalIncomingPacketHandler返回voidreturn关键字后面不能跟对象表达式

感谢

使用if语句返回bool

问题是设置final的代码发生在回调中,并且是异步的。您正在返回同步属性中的值。

因此,final是在返回属性getter之后设置的。

在C#(4+)中处理此问题的惯用方法是返回Task<bool>而不是bool。这将允许您返回一个对象,该对象将在回调完成时设置bool。你可以这样写:

public static Task<bool> SendPacketBoolAsync(string type, string data)
{
    var tcs = new TaskCompletionSource<bool>();
    try
    {
        NetworkComms.SendObject(type, serverIp, serverPort, data);
        NetworkComms.AppendGlobalIncomingPacketHandler<string>("ClientV",
           (header, connection, array) =>
           {
              if (array == "false")
              {
                 tcs.TrySetResult(false);
              }
              else
              {
                 tcs.TrySetResult(true);
              }
           });
    }
    catch (Exception ex)
    {
         tcs.TrySetException(ex);
    }
    return tcs.Task;
}