【问题标题】:What does the tilde do in C#? [duplicate]波浪号在 C# 中的作用是什么? [复制]
【发布时间】:2012-11-30 15:53:55
【问题描述】:

可能重复:
What does the tilde before a function name mean in C#?
What is the tilde (~) in the enum definition?

我知道“~”是用于 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;

}

【问题讨论】:

标签: c#


【解决方案1】:

~ 运算符执行按位补码。

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/bitwise-complement-operator

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

我看不出if(...) 怎么可能是真的,因为IsFieldDeleted() 只返回0 或1,而~0 和~1 都不是零。

【讨论】:

  • IsFieldDeleted 返回01。它们的补码永远不会为零。也许这是原始代码中的一个错误?
  • @JanDvorak:有趣的是,当您输入评论时,我正在更新我的帖子。同意 100%。
  • @EricJ。 :感谢信息,但是当我在 if(...) 块的命令中放置一个断点时,它会到达断点。
  • @user1899082:尝试将 IsFieldDeleted() 的返回值分配给一个 int 变量并共享该值。
  • @EricJ。 IsFieldDeleted 为零,所以它的否定是负一,所以它进入了 if 块。
猜你喜欢
  • 2014-02-22
  • 2012-07-31
  • 2011-05-02
  • 1970-01-01
  • 2019-09-16
  • 2011-08-23
  • 1970-01-01
相关资源
最近更新 更多