You need to enable JavaScript to run this app. C#调用带多个默认值的方法时,实参加双引号的原因及CS0103报错解析
优惠活动
大模型
产品
解决方案
定价
更多

C#调用带多个默认值的方法时,实参加双引号的原因及CS0103报错解析

问题解答

双引号的作用与CS0103错误原因

  • 在C#中,双引号包裹的内容是字符串字面量,代表一个具体的文本值,属于合法的方法实参。比如你代码里写的"child3",就是内容为child3的字符串常量,可以直接传给类型为string的形参。
  • 如果不加双引号直接写child3,比如调用时写MyMethod(child3),C#会将child3识别为标识符(即变量、类、方法的名称),尝试在当前调用上下文(也就是Main方法的作用域)中查找名为child3的变量。但child3只是MyMethod的内部形参,它的作用域仅在MyMethod方法内部,Main方法中根本不存在这个变量,因此会触发CS0103错误(当前上下文中不存在名称“child3”)。

当前代码的实际执行逻辑

你当前写的MyMethod("child3")存在认知偏差:

  • C#调用方法时,如果没有显式指定形参名,实参将按照从左到右的位置顺序依次匹配形参。你这里仅传入了1个字符串值,会直接赋值给第一个形参child1,剩下的child2、child3仍然使用你定义的默认值。
  • 因此这段代码运行后,最终输出的是child3的默认值John,并不是你可能误以为的“给child3参数赋值”。

单独给child3传值的正确写法

如果你不想修改前两个形参的默认值,只想给第三个形参child3传自定义值,需要使用命名参数语法:在形参名后加冒号,再接传入的字符串值:

// 仅给child3传值,child1、child2保留默认值
MyMethod(child3: "传入的自定义文本");
  • 这里冒号前的child3是形参的名称标识,不需要加双引号,因为它的作用是告知编译器要赋值的目标形参,不是要传递的字符串内容。

内容的提问来源于stack exchange,提问作者Hence

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 06:36:05