已经完成了使用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/
但仍然在努力理解如何解决我的问题。
我试过
您对如何解决此问题有任何建议吗?
答案 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)
{
};
这段代码对我来说很好,所以必须有其他东西继续下去。您确定这两组Database
和DbCommand
是否指的是相同的类型?代理中的代码本身是否有效?