在.net 4中的匿名方法中使用委托

本文关键字:方法 net | 更新日期: 2023-09-27 18:24:01

被赋予使用VS2010将一些代码从VS2005中编写的.net 2升级到.net 4的任务。当试图编译代码时,我得到了错误:

无法将匿名方法转换为委托类型"AssignParameter",因为参数类型与委托参数类型不匹配

编译错误所指向的有问题的代码是:

AssignParameter ap = delegate(Database db, DbCommand cmd)
{
  db.AddInParameter(cmd, _jobIDParameterString, DbType.Int32, jobid);
};
DatabaseHelper.LoadDataSet(ap);

因此,我将代码跟踪到代理引用所在的位置:

public delegate void AssignParameter(Database db, DbCommand cmd);
public class DatabaseHelper
{
    private static Database msSqlDb;
    public static DataSet LoadDataSet(AssignParameter parameter)
    {
         ...
         DbCommand command = ...
         // Assign parameter
         if (parameter != null)
         {
             parameter(msSqlDb, command);
         }
         ...
    }
}

所以我读到委托关键字不能以这种方式使用

http://staceyw1.wordpress.com/2007/12/22/they-are-anonymous-methods-not-anonymous-delegates/

但仍在努力理解如何解决我的问题。

我试过

  • 铸造委托
  • 创建一个新的AssignParameter调用,但问题是我没有可用的Database或DbCommand对象

你对如何解决这个问题有什么建议吗?

在.net 4中的匿名方法中使用委托

您在方法中使用的参数类型之一引用了与委托定义的类型不同的类型,正如错误所说。

这意味着,与您发布的代码不同,您的实际代码在其中一个地方使用了不同的类型,或者您在不同的命名空间中为具有相同名称的其中一个/两个参数使用了多个类型。

public class Database
{
}
public class DbCommand
{
}
public delegate void AssignParameter(Database db, DbCommand cmd);
…
AssignParameter ap = delegate(Database db, DbCommand cmd)
{
};

这段代码对我来说编译得很好,所以肯定有其他问题。你确定DatabaseDbCommand这两组引用的类型相同吗?委托中的代码本身是否有效?