簡體   English   中英

將VB.NET Lambda表達式重寫為C#語句

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM