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

VB.NET编译错误BC30491:表达式未产生值的解决方法咨询

修复VB.NET中Configure方法的BC30491编译错误

你遇到的BC30491错误,根源是VB.NET和C#在Lambda表达式语法以及Bind方法的定义上存在差异。

在C#里,IConfigurationSection.Bind()是有返回值的方法,所以可以用带返回值的Lambda(Func<T>)来编写代码;但在VB.NET中,Bind是一个无返回值的Sub过程,你之前错误地用了Function来定义Lambda——而Function要求必须返回一个值,这就导致编译器报错“表达式不产生值”。

直接修复方法

把出错的两行代码里的Function改成Sub即可:

services.Configure(Of AuthorizationSettings)(Sub(s) _configuration.GetSection(NameOf(AuthorizationSettings)).Bind(s))
services.Configure(Of ServicesSettings)(Sub(s) _configuration.GetSection(NameOf(ServicesSettings)).Bind(s))

Sub定义的Lambda是一个Action(Of T)委托,正好匹配Configure方法的参数要求——它只需要执行绑定操作,不需要返回任何值,这样编译器就不会再报错了。

更简洁的替代写法

其实你还可以省略手动写Lambda的步骤,直接把配置节传给Configure方法,它会自动完成绑定,代码更简洁:

services.Configure(Of AuthorizationSettings)(_configuration.GetSection(NameOf(AuthorizationSettings)))
services.Configure(Of ServicesSettings)(_configuration.GetSection(NameOf(ServicesSettings)))

这种写法不仅避免了Lambda语法的坑,可读性也更好,推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 12:17:41