解释 C# 中的后自增 [重复]

2024-02-05

我有一些代码

static void Main(string[] args)
{
    int j = 0;
    for (int i = 0; i < 10; i++) 
        j = j++;
    Console.WriteLine(j);
}

为什么答案是0?


这是因为++ 增量工程 http://msdn.microsoft.com/en-us/library/36x43w8w.aspx. 这篇 MSDN 文章中解释了操作顺序 http://msdn.microsoft.com/en-us/library/aa691363这可以在这里看到(如果我阅读的规范有误,请有人纠正我:)):

int j = 2;
//Since these are value objects, these are two totally different objects now
int intermediateValue = j;
j = 2 + 1
//j is 3 at this point
j = intermediateValue;
//However j = 2 in the end

由于它是一个值对象,因此两个对象 (j and intermediateValue)在这一点上是不同的。旧的 j 增加了,但是因为您使用了相同的变量名,所以它丢失了。我建议阅读以下内容的区别值对象与引用对象 http://www.albahari.com/valuevsreftypes.aspx, also.

如果您为变量使用了单独的名称,那么您将能够更好地看到此细分。

int j = 0;
int y = j++;
Console.WriteLine(j);
Console.WriteLine(y);
//Output is 
// 1
// 0

如果这是具有类似运算符的引用对象,那么这很可能会按预期工作。特别指出如何仅创建指向同一引用的新指针。

public class ReferenceTest
{
    public int j;
}

ReferenceTest test = new ReferenceTest();
test.j = 0;
ReferenceTest test2 = test;
//test2 and test both point to the same memory location
//thus everything within them is really one and the same
test2.j++;
Console.WriteLine(test.j);
//Output: 1

回到原来的点,不过:)

如果您执行以下操作,那么您将获得预期的结果。

j = ++j;

这是因为首先发生增量,然后发生赋值。

但是,++ 可以单独使用。所以,我会把它重写为

j++;

因为它简单地翻译成

j = j + 1;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解释 C# 中的后自增 [重复] 的相关文章

  • boost::interprocess 准备好迎接黄金时间了吗? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在开发一个由内存映射文件支持的线
  • C++ 有像 Pascal 一样的“with”关键字吗?

    withPascal 中的关键字可用于快速访问记录的字段 有人知道 C 是否有类似的东西吗 前任 我有一个包含许多字段的指针 但我不想这样输入 if pointer gt field1 pointer gt field2 pointer g
  • C/C++ 中随机数生成器的实现[重复]

    这个问题在这里已经有答案了 我对 C 中随机数生成器的实现有点困惑 它也与 C 中的明显不同 如果我理解正确 对 srand seed 的调用会以某种方式初始化可通过 rand 访问的隐藏变量 种子 该变量又将函数指向预先生成的序列 例如例
  • 在 MVC 类上创建主键字段

    我是 MVC 和 C 新手 我只是偶然发现它并发现它很有趣 我遇到了一个不允许我继续的问题 这是我的代码 using System using System Collections Generic using System Linq usi
  • C++:获取注册表值仅给出第一个字符[重复]

    这个问题在这里已经有答案了 我试图从注册表中获取字符串值 但我只得到第一个字母 HKEY hKey char gamePath MAX PATH if RegOpenKeyEx HKEY CURRENT USER L Software Bl
  • 使用 QSet 作为 Qt 地图容器中的键

    我需要一个映射 其中键是唯一的 并且每个键都是一组或自定义 POD 结构 其中包含 3 个数据项 这些值只是指向对象实例的指针 从阅读Qt 的 QMap 与 QHash 的文档 http qt project org doc qt 4 8
  • C# ConfigurationManager 从 app.config 检索错误的连接字符串

    我有一个简单的 WinForms 应用程序 它最终将成为一个游戏 现在 我正在研究它的数据访问层 但遇到了障碍 我创建了一个单独的项目 名为DataAccess在其中 我创建了一个本地 mdfSQL Server 数据库文件 我还创建了一个
  • 禁用除滚动之外的 DataGridView

    我如何配置 datagridview 以便用户只能在行中移动并使用滚动 而没有其他 如果我禁用网格不允许我使用滚动 将您的 datagridview 设置为只读 这将禁用任何编辑 dataGridView1 ReadOnly true 在你
  • 实体框架7审计日志

    我正在将一个旧项目移植到 ASP NET 5 和 Entity Framework 7 我使用数据库优先方法 DNX 脚手架 来创建模型 旧项目基于Entity Framework 4 审计跟踪是通过重写实现的SaveChanges的方法D
  • CMake 警告:无法为目标生成安全的链接器搜索路径

    在为 pcl 项目运行 CMake 时 我收到一条警告消息 Configuring done CMake Warning at CMakeLists txt 12 add executable Cannot generate a safe
  • 首先EntityFramework数据库 - 类型映射 - 将binary(8)从SQL映射到C#中的int

    在 SQL 内部 我有一个主键为二进制 8 的表 当我使用该表添加到我的模型中时Update Model from Database我可以看到该列有 type Binary 在 C 中 我将该列设为byte 我可以将该列映射到 int 吗
  • 我们应该使用 Eval 还是 Databind 事件?

    当使用 Asp Net 并使用 ListView 等控件创建网站时 使用 Eval 命令是一个好习惯吗 还是应该在 databind 事件中填充文字和数据 取决于您是否想在更新事件上写回数据 在这种情况下数据绑定 如果您只想读取该数据 可以
  • 基于 C++ 范围的 for 循环

    尝试使用基于范围的 for 循环执行某些操作 可以使用常规的 for 循环来完成 如下所示 vector
  • 在非指针变量和类成员上放置 new

    考虑以下示例 include
  • 如何使用 C# 代码使用超链接的 onClick 事件?

    我正在尝试为页面中的超链接添加条件 而不是仅仅使用特定的链接 例如 a href help Tutorial html Tutorial a 我想为不同的用户显示不同的页面 例如 如果用户以管理员身份登录 他们将看到与普通用户不同的链接 我
  • 在 C# 中生成随机值

    如何使用以下命令生成随机 Int64 和 UInt64 值RandomC 中的类 这应该可以解决问题 这是一个扩展方法 因此您可以像调用普通方法一样调用它Next or NextDouble上的方法Random目的 public stati
  • 停止 TcpListener 的正确方法

    我目前正在使用 TcpListener 来处理传入连接 每个连接都有一个线程用于处理通信 然后关闭该单个连接 代码如下 TcpListener listener new TcpListener IPAddress Any Port Syst
  • 为什么从绑定返回的对象会忽略额外的参数?

    假设我有一个带有两个参数的函数 void f int x int y 我想绑定其中之一 我可以用std bind如下 auto partiallyBoundF std bind f 10 1 partiallyBoundF仅需要一个参数 但
  • 统一;随机物体移动[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在制作一款机器人战斗游戏 我希望敌人随机移动 然后有时会向敌人移动 我希望运动包含在其中的代码 else if avoid fal
  • Visual Studio 2015默认附加库

    当我在 VS 2015 中创建一个空项目时 它会自动将这些库放入 附加依赖项 中 kernel32 lib user32 lib gdi32 lib winspool lib comdlg32 lib advapi32 lib shell3

随机推荐

  • 指定的资源名称长度不在 Azure Blob 存储允许的限制内

    当我尝试将 blob 上传到我的网站时 收到错误消息 指定的资源名称长度不在允许的范围内 Azure Storage Account 下面是我的代码 private async Task UploadToAzureBlobStorage s
  • Redux Toolkit 查询未获取数据

    I am trying to fetch data with RTK Query in next js project and everything were fine until I had to fetch some more data
  • C 预处理器可以执行简单的字符串操作吗?

    This is C宏观怪异问题 是否可以编写一个宏 以字符串常量 X 作为参数 并求值为相同长度的字符串 Y 使得 Y 的每个字符都是 X 对应字符的 常量 算术表达式 这是不可能的 对吧 不 C 预处理器将字符串文字视为单个标记 因此它无
  • 如何在 Outlook 2016 中查看电子邮件的 HTML 源代码 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想在outlook 2016中查看一封电子邮件的html源代码 它似乎与以前版本的outlook有所不同 我正在运行 Outlook 2
  • 我的应用程序屏幕出现在浏览器中

    我在 Android 上打开浏览器 opera 或 firefox 并在地址栏上写下我的深层链接 当我按浏览器上的 Go 按钮时 它会按预期将我重定向到 我的应用程序 但问题是我的应用程序出现在浏览器上 如图所示 我如何打开我的应用程序并随
  • 相对于光标滚动 Vim,自定义映射

    所以我读过 help scroll cursor真的很喜欢zz 这会将光标所在的行置于窗口中间 我正在寻求帮助来制作一个类似于以下内容的映射zz但将光标所在的行放在窗口高度的 20 或 25 30 等 处 Edit 感谢 ZyX 和 Dra
  • 计算机图形学编程中的翻页是什么意思?

    翻页是什么意思 为什么我们在图形编程中需要它 页面翻转是一种简单的硬件辅助技术 可实现无闪烁图形 已经使用了数十年 它需要硬件的支持 视频子系统必须至少有两个内存区域 页 可能是可见的 其中任何时候都只有一个可见 给定的时刻 视频子系统支持
  • 检查您是否已在 Game Center/GameKit 中解锁成就

    我已经被这个问题困扰了很长一段时间 我了解如何解锁游戏中心的成就 甚至让整个消息系统正常工作 但我不知道如何检查成就是否已解锁 显然这不起作用 GKAchievement achievement GKachievement alloc in
  • 如何在 React 中为嵌套形状提供默认属性?

    React 有没有办法为特定形状的嵌套数组提供默认属性 鉴于下面的示例 可以看到我的第一次尝试 但这并没有按预期工作 static propTypes heading PT string items PT arrayOf PT shape
  • 在 Ubuntu 上安装并启动 H2 数据库

    我想在 Ubuntu 12 10 上使用 H2 数据库 并访问该网站并获取了与平台无关的安装文件 安装说明非常字面意思 要安装软件 请运行安装程序或将其解压缩到您选择的目录 我不是 Linux 新手 所以我以前使用过许多常用的安装过程 但我
  • 如何在原生 Android 应用程序中渲染 epub 文件?

    我正在尝试制作一个 Android 应用程序 它将呈现 epub 文件并在 Android 布局中显示其内容 我做了一个类似的应用程序 使用 pdfRenderer 显示 pdf 它使用位图显示 pdf 页面 如何在 android 中使用
  • ImportError:PyCapsule_Import 无法导入模块“pyexpat”

    我正在使用 Jenkins 构建一个 python Flask 解决方案以部署到 Google App Engine 作为构建过程的一部分 我运行了一些集成测试 其中之一因以下错误而失败 ERROR Failure ImportError
  • 仅在 NavigationView 中为指定图标禁用色调

    I need to disable a tint color for some icons in NavigationView because their color define category type How can I do it
  • TypeScript 中的“EventTarget”上不存在属性“value”

    使用 React 的 TypeScript 中的以下代码输出以下错误 类型 EventTarget 上不存在属性 value import React Component from react class InputForm extends
  • Cordova 模拟 android 退出代码 1

    我有通过科尔多瓦成功构建的代码 但是 当我尝试模拟它时 我收到此错误 错误 cmd 命令失败 退出代码为 1 有想法该怎么解决这个吗 这是我尝试模拟代码的输出 https i stack imgur com 7LqiN png 我有同样的问
  • JanusGraph:从 EC2 访问 Amazon Managed Cassandra

    我正在尝试设置 JanusGraph 来访问 Amazon MCS 基础设施已经具备了允许访问的能力 但我在配置步骤中遇到了困难 这是我要设置的配置janusgraph cql properties storage backend cql
  • 如何解决 Android get-app-links 返回状态 1024?

    我无法获得在 Android 13 上工作的深层链接 我已经遵循了所有教程 但无法让应用程序在进入网站后简单启动 我在 android studio 终端中使用了命令 adb shell pm get app links com where
  • 在 mvc4 中使用 ajax post 处理大量数据时,系统抛出 System.ArgumentException 异常

    我正在执行 ajax post 以在 mvc4 中发布来自 javascript 的数据 但失败并出现以下异常 string exceeds the value set on the maxJsonLength property Param
  • 何时使用index.php而不是index.html

    我对 php 比较陌生 有一件非常基本的事情一直困扰着我 据我了解 php 用于使网站动态化 我还了解到 php 是可用于制作动态网站的众多服务器端脚本语言之一 但是 我不明白的是 我什么时候需要使用index php页面 举例来说 如果我
  • 解释 C# 中的后自增 [重复]

    这个问题在这里已经有答案了 我有一些代码 static void Main string args int j 0 for int i 0 i lt 10 i j j Console WriteLine j 为什么答案是0 这是因为 增量工