V2EX 06月29日 20:50
[程序员] claude code 的服从性远不如 cursor
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文对比了两种代码迁移工具——Claude Code 和 Cursor 在 C# 项目重构中的表现。作者的任务是将 A.cs 中的方法迁移到 B.cs,并移除 A.cs。Claude Code 试图通过脚本快速迁移,但生成大量错误,最终未能成功。而 Cursor 则逐个方法进行迁移,虽然耗时较长,但成功完成了任务,验证了其在代码迁移方面的可靠性。作者认为,尽管任务简单,Claude Code 的表现令人失望,而 Cursor 展现了更稳健的迁移能力。

🤔 项目背景:作者需要将C#项目中A.cs的70多个方法迁移到B.cs,并移除A.cs,以简化代码结构,去除中间层。

⚠️ Claude Code 的尝试:Claude Code 试图通过脚本进行快速迁移,但产生了大量错误,导致无法编译通过,且迁移后的代码与原实现不符,最终未能完成任务。

✅ Cursor 的表现:Cursor 采用逐个方法迁移的方式,虽然耗时较长,但成功完成了代码迁移,确保了迁移后的代码功能正确。

💡 迁移难度分析:作者认为,代码迁移本身并不复杂,主要是将A.cs中的代码复制到B.cs对应方法,并修改引用关系。这使得 Cursor 这种逐个迁移的方法更易于成功。

cursor 是 pro ,用的是 claude 4 sonnet maxclaude code 是 max ,用了 claude 4 opus 和 sonnet 都尝试过

我的任务是将一个 c#项目中 a.cs 中的七十多个方法按照新的格式迁移到 b.cs 中,然后抛弃 a.cs 。实际上就是重构去除中间层,原本的程序逻辑是 b.cs 中的 70 多个方法调用 a.cs 中的 70 多个对应方法,具体实现在 a.cs 中,非常蠢,我也不知道之前写这段代码的人的思路,每次添加修改功能都需要在两个文件中进行修改。

于是我试图让 claude code 进行迁移,claude code 迁移时候光想着怎么取巧了,写了个脚本迁移,迁移完了报几十个错误,修了十几个之后,说剩下的错误都大同小异,让我先把主要任务标记为完成——然后把 a.cs 给删了,明明这时候压根就没法编译通过,它就说迁移已完成了。而且经过测试,这些迁移问题很大,因为这 70 多个方法实际上签名都不一样,有的传 jObject ,有的传 JArray ,有的传自定义类型(别问我为啥写成这样,我也想知道),但是 claude code 在 b.cs 里写的实现看起来根本没有参考 a.cs 里原来的实现,就完全是在自嗨,写出来的方法最后跑起来时候风控报错:

API call 'AAAAAAAA' failed: Deserialized JSON type 'Newtonsoft.Json.Linq.JArray' is not compatible with expected type 'Newtonsoft.Json.Linq.JObject'. Path 'data', line 4, position 11.

//imgur.com/pcRr98Z

有点离谱,我让他“一个一个进行迁移”,他也是阳奉阴违,迁移了几个然后就告诉我都看了个遍,现在没问题了。结果 diff 一下实际上就改了 3 个方法,跑起来果不其然又报一堆错。

反而是 cursor 修改的时候是真的遵照我的指令一个一个改的,可以看到思考步骤(思考了几十遍,一遍改一个方法,直到把 a.cs 里的全部迁移到 b.cs )而且一次跑通了。

https://imgur.com/WbXeGdB

本来这个迁移其实也并不难,因为大部分的迁移都是直接把 a.cs 里的代码复制到 b.cs 对应的方法,去掉 b 里面引用 a.cs 的语句就行了,没什么难度和复杂性。所以像 cursor 这样一个方法一个方法地迁移想要出错都很难,但就这点事 claude code 都干不好,属实让人火大。

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

代码迁移 Claude Code Cursor C# 重构
相关文章