使用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关键字后面不能跟对象表达式
感谢
问题是设置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;
}