C#中直接传新对象作为方法参数无需声明变量及报错原因解析
问题核心原因
- 方法调用的参数位置只允许传入表达式,不允许写入普通变量声明语句
第一种写法的合法性
new FileInfo(@"D:\New.xlsx")属于合法的对象创建表达式,执行后会直接返回FileInfo类型的实例,完全匹配SaveAs方法的参数类型要求,因此可以直接作为参数传递,不需要提前赋值给命名变量。
第二种写法的报错原因
FileInfo pathVariable = new FileInfo(@"D:\New.xlsx")是完整的变量声明赋值语句,不属于可用于传参的表达式,C#语法不支持在普通方法参数的位置写变量声明语句,因此会触发编译错误。
如果需要先声明变量再传参,正确的写法是拆分语句:
// 先在方法调用外完成变量声明赋值 FileInfo pathVariable = new FileInfo(@"D:\New.xlsx"); // 再把变量作为表达式传入参数 package.SaveAs(pathVariable);
补充说明
仅out参数存在例外:C# 7.0及以上版本支持在传递out参数时内联声明变量,比如int.TryParse("123", out int res)是合法语法,属于C#专门为out参数设计的语法糖,普通参数不支持该用法。
内容的提问来源于stack exchange,提问作者fysharp
相关产品推荐
相关产品推荐

