在.NET 4中使用anonyous方法中的委托

时间:2014-09-23 15:36:40

标签: c# delegates

已经完成了使用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);
         }
         ...
    }
}

所以我读过不能以这种方式使用delegate关键字

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

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

我试过

  • 投射代表
  • 创建一个新的AssignParameter调用,但问题是我没有可用的Database或DbCommand对象

您对如何解决此问题有任何建议吗?

2 个答案:

答案 0 :(得分:1)

您在方法中使用的参数类型之一是指与委托定义的不同类型,如错误所述。

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

答案 1 :(得分:0)

public class Database
{
}

public class DbCommand
{
}

public delegate void AssignParameter(Database db, DbCommand cmd);

…

AssignParameter ap = delegate(Database db, DbCommand cmd)
{
};

这段代码对我来说很好,所以必须有其他东西继续下去。您确定这两组DatabaseDbCommand是否指的是相同的类型?代理中的代码本身是否有效?