You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用in关键字传递参数为何触发C# 9.0编译器报错?

问题排查与解决方案

1. 检查SpanContext的类型

in关键字在C# 7.2中仅支持值类型作为参数,C# 8.0才扩展支持readonly引用类型。如果SpanContext是普通引用类型(class),在C# 7.3/9.0中使用in修饰参数传递会直接触发编译错误:

  • 若SpanContext是struct(值类型):继续排查其他原因;
  • 若SpanContext是class:要么将项目语言版本升级到C# 8.0及以上,要么调用时移除in关键字(需确认方法是否允许,若方法定义强制要求in,只能升级语言版本)。

2. 确认项目的语言版本设置

即使编译器版本是v9.0(对应.NET 5),如果项目的语言版本被手动设置为低于7.2,也会导致in关键字无法被识别:

  • 右键项目 → 属性 → 生成 → 高级 → 语言版本,选择C# 7.2或更高版本(如C# 9.0)。

3. 检查方法定义与调用的兼容性

如果StartActiveSpan是第三方库中的方法,需确认该库的编译语言版本:

  • 若库是用C# 8.0+编译的(使用了readonly引用类型的in参数),而你的项目语言版本低于8.0,调用时就会报错,此时必须升级项目语言版本。

4. 临时变量传递的问题

如果调用时传递的parentContext是一个临时表达式(如in new SpanContext()),在C# 7.3中对于值类型是允许的,但如果是引用类型则不支持。若属于这种情况,可先将表达式赋值给变量,再用in传递变量(仅适用于值类型)。

内容的提问来源于stack exchange,提问作者Yossi G.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 14:25:56