













转自:kimi.com
一句话:in 就是**“按引用只读传参”**——把大型结构体按地址传进去,既省拷贝又保证你在方法里绝对不能改它。
拆开说:
只读引用
csharp
Copy
void Foo(in BigStruct s) { /* 不能给 s 重新赋值,也不能改字段 */ }
编译器帮你加 readonly 保护,任何修改直接报错。
省拷贝
结构体很大时,不需要整份复制,只传一个 8 字节指针(x64),性能接近传 ref,但无副作用。
调用端语法
调用时不需要写 in:Foo(myStruct); 或 Foo(in myStruct); 都行;写不写效果一样,写上是显式提示。
与 ref readonly 的返回值配对
csharp
Copy
ref readonly BigStruct Get() => ref _cache;
Foo(Get()); // 全程零拷贝
不能用于
• 类(class)——本来就是引用,再包一层没意义
• async、iterator 方法
• 作为接口/委托签名(除非显式 in)
速记口诀in = “传进来,别碰它,省拷贝”。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。