使用 if 语句返回 bool
Posted
技术标签:
【中文标题】使用 if 语句返回 bool【英文标题】:Return bool with if statement 【发布时间】:2013-07-22 21:43:50 【问题描述】:我的代码需要一些帮助,因为它总是返回 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;
如何更改此代码以使其返回真或假?我做不到
if (array == "false")
final = false;
return false;
else
final = true;
return true;
因为我得到错误
NetworkComms.AppendGlobalIncomingPacketHandler 返回 void a return 关键字后面不能跟对象表达式
谢谢
【问题讨论】:
在异常捕获块中放一条打印语句,看是否打印。我怀疑您遇到了异常,这就是它永远不会更新的原因。 【参考方案1】:问题在于设置final
的代码发生在回调中,并且是异步的。您正在同步属性中返回值。
因此,final
设置在您的属性 getter 被返回之后。
在 C# (4+) 中处理此问题的惯用方法是返回 Task<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;
【讨论】:
我应该如何获得回报?if (!Connection.sendPacketBool("Check", versionPacket))
不行
@AlvaroCarvajalNakosmai 如果您使用的是 VS 2012,async/await 让这一切变得简单:bool check = await Connection.SendPacketBoolAsync("Check, versionPacket); if (!check) ...
@AlvaroCarvajalNakosmai 然后您可以使用延续 - 请参阅:reedcopsey.com/2010/04/19/…
非常感谢,真的帮了我!以上是关于使用 if 语句返回 bool的主要内容,如果未能解决你的问题,请参考以下文章