繁体   English   中英

将VB.NET代码转换为C#:无法将Lambda表达式转换为类型“ Delegate”,因为它不是委托类型

[英]Converting VB.NET code to C#: Cannot convert lambda expression to type 'Delegate' because it is not a delegate type

好的,所以我有一个要转换为C#的VB项目。 到现在为止还挺好。 问题是两种语言之间的委托/动作完全不同,我正在努力找出差异。

Private methods As New Dictionary(Of Integer, [Delegate])

Private Sub Register(id As Integer, method As [Delegate])
    methods.Add(id, method)
End Sub

Private Sub LogName(name As String)
    Debug.Print(name)
End Sub

Private Sub Setup()
    Register(Sub(a As String) LogName(a))
End Sub

在C#中

private Dictionary<int, Delegate> methods;

private void Register(int id, Delegate method)
{
    methods.Add(id, method);
}

private void LogName(string name)
{
    Debug.Print(name);
}

private void Setup()
{
    Register((string a) => LogName(a));
}

上面的最后一行导致CS1660 Cannot convert lambda expression to type 'Delegate' because it is not a delegate type错误。

您的注册方法应定义为:

private void Register(int id, Action<string> method)
{
    methods.Add(id, method);
}

或者您需要将lambda显式地包装在Action

private void Setup()
{
    Register(5, new Action<string>((string a) => LogName(a)));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM