表达式不能在vb.net应用程序中生成值
本文关键字:应用程序 net 不能 vb 表达式 | 更新日期: 2023-09-27 18:13:55
我有一个Winforms应用程序,我想在其中使用MVVM设计模式:
我遵循这个教程
这是非常有趣的文章,但我得到这个问题:我的应用程序是vb.net,我转换代码(c#)到vb.net,它工作得很好,除了这个:
c#代码
protected void ViewModel_Validated(object sender, EventArgs e)
{
this.ViewModel.AttachedControls.ToList().ForEach(c => this.errorProvider.SetError(c.Value as Control, ""));
if (!string.IsNullOrEmpty(this.ViewModel.Error)) {
this.ViewModel.Messages.ToList().ForEach(message => {
this.errorProvider.SetError(this.ViewModel.AttachedControls[message.Key] as Control, message.Value);
});
}
}
<<p> Vb.net代码/strong> Protected Sub ViewModel_Validated(ByVal sender As Object, ByVal e As EventArgs)
Me.ViewModel.AttachedControls.ToList().ForEach(Function(c) Me.errorProvider.SetError(TryCast(c.Value, Control), ""))
If Not String.IsNullOrEmpty(Me.ViewModel.[Error]) Then
Me.ViewModel.Messages.ToList().ForEach(Function(message)
Me.errorProvider.SetError(TryCast(Me.ViewModel.AttachedControls(message.Key), Control), message.Value)
End Function)
End If
End Sub
问题在这一行:
Me.ViewModel.AttachedControls.ToList().ForEach(Function(c) Me.errorProvider.SetError(TryCast(c.Value, Control), ""))
错误:
Expression does not produce a value.
我需要知道
- 这个错误的原因是什么?
- 我该如何修复它?
将Function
改为Sub
Function
表示返回值的方法,但您的代码:Me.errorProvider.SetError(TryCast(c.Value, Control), "")
没有。
来自MSDN:
要向调用代码返回一个值,使用Function过程;否则,使用子过程。
所以尝试:
Me.ViewModel.AttachedControls.ToList().ForEach(Sub(c) Me.errorProvider.SetError(TryCast(c.Value, Control), ""))
下一行你需要修改:
Me.ViewModel.Messages.ToList().ForEach(Sub(message)
Me.errorProvider.SetError(TryCast(Me.ViewModel.AttachedControls(message.Key), Control), message.Value)
End Sub)
在vb.net中子程序和函数都是子程序,或者可以在程序中调用的代码段。它们之间的区别在于函数有返回值,而子函数没有。因此,最好将函数更改为sub以避免