【问题标题】:operator++ in VB.NET - Interlocked.IncrementVB.NET 中的 operator++ - Interlocked.Increment
【发布时间】:2011-05-30 09:43:46
【问题描述】:

根据here 的讨论,其中一个答案似乎暗示通过使用从 C# 到 VB.NET 的代码转换器,应用于 int 的 operator++ 应替换为 System.Math.Max(System.Threading.Interlocked.Increment(current),current - 1)),我想知道这是否是真的正确吗?

如果是这样,为什么它是正确的?我不认为 operator++ 会被实现为 Interlocked.Increment 操作?我什至不认为它是线程安全的。我没有看到这两个是谁相同,那么为什么链接到的问题的答案甚至有效?

我试过了,它产生了正确的结果。 AFAIK,.NET 没有像 C++ 那样的未定义行为。

谁能澄清一下?

【问题讨论】:

  • 我是在另一个问题中提供答案的人。仅供参考:我使用了telerik's converter
  • @Daniel:谢谢提及:)
  • 你是写,没必要用interlocked.increment

标签: c# vb.net c#-to-vb.net


【解决方案1】:

你可以在 VB.Net 中做x += 1。不如 x++ 优雅,但比 x = x + 1 更好。

Interlocked.Increment 用于使您的添加操作线程安全。你可能根本不需要它。

编辑:另外,如果不清楚,VB 中没有 ++ 运算符,我不明白为什么,但是...

【讨论】:

  • 我认为 VB 中没有“++”的原因正是因为您可以使用 x += 1。在 VB 中,源代码的简洁性不是主要问题(参见所有 Not And Or Then End Do C/C++ 呈现为标点符号的东西)——除了 With 语句的情况,C/C++ 可以有用地使用它!
  • 在某些情况下使用 ++ 可能会派上用场,如果不仅允许后增量/减量,而且还允许预增量/减量,则更方便。
  • x+=1 与 x++ 完全不同。后者返回一个值。 ++ 并没有真正的价值——除了让语言变得不必要的复杂。
  • 我不同意,正如我所说,前后增量器/减量器在几种情况下都很方便。当然,他们不会做出任何你无法通过其他方式实现的东西,但对于那里的许多功能也可以这样说。
  • 实际上,@DavidHeffernan,您刚刚说了自己为什么它 IS 有价值 - 后者返回一个值的事实。现在希望 VB.NET 可以做到这一点。 :(
【解决方案2】:

C# operator++ 不使用互锁语义。相当于x=x+1

【讨论】:

    【解决方案3】:

    不,它不是 current++ 的正确替换,因为 current++ 返回 current 的未更改值(后增量),而

    System.Math.Max(System.Threading.Interlocked.Increment(current),current - 1))
    

    返回增量值(预增量)。

    我从 C# 到 VB 转换器 http://www.developerfusion.com/tools/convert/csharp-to-vb/ 得到了相同的代码,这种差异改变了程序的行为。

    【讨论】:

    • 我的意思是不变的值应该是前增量,增量值应该是后增量,除非我的英语是错误的
    猜你喜欢
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 2023-03-17
    • 2011-08-07
    • 1970-01-01
    相关资源
    最近更新 更多