【发布时间】:2011-01-06 02:27:50
【问题描述】:
我的任务是从 VB 转换为 C# 的一些代码。我的一个 sn-p 似乎无法从一个转换为另一个,如果是这样,我只是不知道该怎么做,有点沮丧。
这里有一些背景:
OrderForm 是一个abstract 类,由Invoice(以及PurchaseOrder)继承。下面的 VB sn-p 工作正常:
Dim Invs As List(Of OrderForm) = GetForms(theOrder.OrderID)
....
Dim inv As Invoice = Invs.Find(
Function(someInv As Invoice) thePO.SubPONumber = someInv.SubInvoiceNumber)
在 C# 中,我最好的转换方法是:
List<OrderForm> Invs = GetForms(theOrder.OrderID);
....
Invoice inv = Invs.Find(
(Invoice someInv) => thePO.SubPONumber == someInv.SubInvoiceNumber);
但是,当我这样做时,我收到以下错误:
无法将 lambda 表达式转换为委托类型“System.Predicate”,因为参数类型与委托参数类型不匹配
有什么方法可以在不重构我的整个代码库的情况下解决这个问题?
【问题讨论】:
-
几乎所有 C# 都可以转换为 VB.NET,反之亦然,因为它都编译为 MSIL。你只需要找到表达问题的最佳点。这只是一个澄清性评论。
-
对于将 VB 转换为 C# - 您是否考虑过反汇编 Redgate .NET Reflector 中已编译的 VB 函数(免费版工作正常),并将输出类型设置为 C#?可能有助于这些棘手的转化类型。