[英]Rewriting a VB.NET Lambda expression as a C# statement
我將我的應用程序從框架的版本4降級到版本4,現在我想實現此VB.NET lambda函數語句(適用於3.5)
Dim colLambda As ColumnItemValueAccessor = Function(rowItem As Object) General_ItemValueAccessor(rowItem, colName)
並用C#重寫它。 這是我的嘗試:
ColumnItemValueAccessor colLambda = (object rowItem) => General_ItemValueAccessor(rowItem, colName);
執行此操作時,出現以下錯誤:
Error 14 One or more types required to compile a dynamic expression cannot be found. Are you missing references to Microsoft.CSharp.dll and System.Core.dll? C:\Source\DotNet\SqlSmoke\SqlSmoke\UserControls\ScriptUserControl.cs 84 73 SqlSmoke
但是,當我將應用程序從框架版本4.0降級到3.5時(因為我們的用戶只有3.5,並且沒有安裝4.0的權限)。 當我這樣做時,對“ Microsoft.CSharp”的引用被破壞了。
是否可以像在VB.NET中一樣使用在C#3.5中有效的語法在C#中重寫VB.NET命令? 語法是什么?
我在想,如果我想保留3.5,這是必須的,那么我必須在VB.NET中編寫此代碼,因為看起來C#在VB之后獲得了此功能。
namespace BinaryComponents.SuperList
{
public delegate object ColumnItemValueAccessor(object rowItem);
}
private object General_ItemValueAccessor(DataRow rowItem, object colName)
{
DataRow rowPerson = (DataRow)rowItem;
return rowPerson[colName.ToString()].ToString();
}
C#中的動態鍵入是.Net 4.0的新增功能。
不要使用動態。
只要確保正確使用
using System.Linq;
問題似乎是其中一種類型不匹配。 將委托參數類型從object
更改為DataRow
:
public delegate object ColumnItemValueAccessor(DataRow rowItem);
如AVD所述,您還需要在lambda表達式上修復語法(隱含rowItem
的類型object
,不應在此處指定它):
ColumnItemValueAccessor colLambda = (rowItem) => General_ItemValueAccessor(rowItem, colName);
關鍵點是,當您為委托類型ColumnItemValueAccessor
編寫lambda表達式時,lambda的參數和返回類型必須與委托匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.