瓷砖在C#中的作用是什么?

瓷砖在C#中的作用是什么?,c#,C#,可能重复: 我知道“~”表示Finalzier方法,但现在我看到一些C代码如下: if (~IsFieldDeleted(oRptField.GetLayoutField()) != 0) { oCollection.Add(oRptField, oRptField.ObjectKeyString); // some more stuff } 注意第一行中的“~”吗 然后,如果我转到IsFieldDeleted的实现,它是一个返回int的方法 private int IsFie

可能重复:

我知道“~”表示Finalzier方法,但现在我看到一些C代码如下:

if (~IsFieldDeleted(oRptField.GetLayoutField()) != 0)
{
   oCollection.Add(oRptField, oRptField.ObjectKeyString);
   // some more stuff
}
注意第一行中的“~”吗

然后,如果我转到IsFieldDeleted的实现,它是一个返回int的方法

private int IsFieldDeleted(LayoutLib.LayoutField oLayoutField)
{
    Collection oColl = GetFieldIdsForField(oLayoutField);

    return (oColl.Count == 0) ? 1 : 0;

}

~
运算符执行按位补码

IsFieldDeleted()
返回一个int,该运算符可以应用于该类型(int、uint、long、ulong)。取位补码,然后与零进行比较


我不明白if(…)怎么可能是真的,因为
IsFieldDeleted()
只返回0或1,~0和~1都不是零

你可以很容易地用谷歌搜索到这个;如果是位求反,那么
~0
~1
都不是零。我认为这是位求反。有点像
除了值中的每个位。
IsFieldDeleted
返回
0
1
。它们的补码从不为零。也许这是原始代码中的一个错误?@JanDvorak:有趣的是,当你键入评论时,我正在更新我的帖子。100%同意。@EricJ.:感谢inmfo,但当我在if(…)块的命令中放置断点时,它会到达断点。@user1899082:尝试将
IsFieldDeleted()
的返回值赋给一个int变量,并共享该值。@EricJ。IsFieldDeleted为零,因此其否定为负1,因此它进入if块。