将VB.NET Lambda表达式重写为C#语句

将VB.NET Lambda表达式重写为C#语句,c#,vb.net,vb.net-to-c#,C#,Vb.net,Vb.net To C#,我将我的应用程序从框架的第4版降级到第4版,现在我想实现这个VB.NET lambda函数语句(它在3.5上工作) 然后用C#重写它。这是我的尝试: ColumnItemValueAccessor colLambda = (object rowItem) => General_ItemValueAccessor(rowItem, colName); 当我这样做时,我得到以下错误: Error 14 One or more types required to compile a dy

我将我的应用程序从框架的第4版降级到第4版,现在我想实现这个VB.NET lambda函数语句(它在3.5上工作)

然后用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”的引用被打破了

我可以用C#3.5中有效的语法在C#3.5中重写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#中的动态键入是.NET4.0的新功能

不要使用动态。

C#中的动态键入是.NET4.0的新功能


不要使用动态。

只要确保使用正确的

using System.Linq;

只要确保有正确的使用方法

using System.Linq;

问题似乎是其中一种类型不匹配。将委托参数类型从
对象
更改为
数据行

public delegate object ColumnItemValueAccessor(DataRow rowItem);
正如AVD所指出的,您还需要修复lambda表达式上的语法(暗示了
rowItem
的类型
object
,不应在此处指定):


关键的一点是,当您为委托类型编写lambda表达式时,lambda的参数和返回类型必须与委托匹配。

问题似乎是其中一种类型不匹配。将委托参数类型从
对象
更改为
数据行

public delegate object ColumnItemValueAccessor(DataRow rowItem);
正如AVD所指出的,您还需要修复lambda表达式上的语法(暗示了
rowItem
的类型
object
,不应在此处指定):


关键的一点是,当您为委托类型
ColumnItemValueAccessor
编写lambda表达式时,lambda的参数和返回类型必须与委托匹配。

您能解释一下吗?我对这个功能有点陌生。也许,更改行的语法?也许您在程序中的某个地方使用了“dynamic”关键字。我使用了代码转换器,但没有意识到“string colName=DataCol.ColumnName;”以前定义为“dynamic colName=DataCol.ColumnName;”。我以为我发布的语句使用的是“dynamic typing”在你提到动态是一个关键词之前,我一直在搜索它——宾果。谢谢。你能解释一下吗?我对这个功能有点陌生。也许,更改行的语法?也许您在程序中的某个地方使用了“dynamic”关键字。我使用了代码转换器,但没有意识到“string colName=DataCol.ColumnName;”以前定义为“dynamic colName=DataCol.ColumnName;”。我以为我发布的语句使用的是“dynamic typing”在你提到动态是一个关键词之前,我一直在搜索它——宾果。谢谢。你能告诉我们ColumnItemValueAccessor和General_ItemValueAccessor是如何定义的吗?当然。请看我的更新。谢谢。你能告诉我们ColumnItemValueAccessor和General_ItemValueAccessor是如何定义的吗?当然。请看我的更新。谢谢