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
相关产品推荐
相关产品推荐

