2013-01-22 48 views
-1

有了这个代码的“如果”行断点:为什么这种情况等同于错误?

if ((ckbx.Content != null) && (!ckbx.Content.ToString().Contains("(Empty list)"))) 
{ 
    string groupName = ckbx.Content.ToString(); 
    var contextMenu = new PopupMenu(); 

    contextMenu.Commands.Add(new UICommand("Edit this Group", contextMenuCmd => Frame.Navigate 

    (typeof(LocationGroupCreator), groupName))); 

    contextMenu.Commands.Add(new UICommand("Delete this Group", async (contextMenuCmd) => 
    { 
     await SQLiteUtils.DeleteGroupAsync(groupName); 
    })); 

    await contextMenu.ShowAsync(args.GetPosition(this)); 
} 

... ckbx.Content是“(空单)”,但病情被视为假 - 条件失败。为什么?

+0

什么ckbx.Content的类型? – Ameen

+0

它似乎正常工作。第一个条款是真的, “(空列表)”。包含(“空列表”)是真的,但你扔了!在前面,所以它是错误的 –

+0

在这种情况下使用调试器非常有用。 –

回答

3

... ckbx.Content是“(空列表)”,但条件被视为假 - 条件失败。为什么?

你的条件有logical negation operator!)否定的Contains结果:

(!ckbx.Content.ToString().Contains("(Empty list)")) 

因此,如果内容包含 “(空单)”,Contains将返回true!会使它false,这使得条件失败。

+0

正确;现在我想知道它为什么直到最近才奏效。我敢肯定,我没有触及那个代码... –

+0

啊,现在我明白了 - 这是它应该如何工作的(与“非空列表”);在回到这个项目之后,我忘记了没有显示编辑或删除,如果该项目还没有创建(在这种情况下,内容是“空列表”...) –

2

(ckbx.Content != null)是真的

(!ckbx.Content.ToString().Contains("(Empty list)")是假的 - 你刚才说,这是空列表...这支票是不是空的列表(在前面感谢“!” - “! “意味着不)。

真& &假的,当然,等同于假

相关问题