【发布时间】:2014-09-23 23:51:53
【问题描述】:
被赋予了将一些代码从 VS2005 编写的 .net 2 升级到使用 VS2010 的 .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 对象
您对如何解决此问题有任何建议吗?
【问题讨论】:
-
用
(db, cmd) =>替换delegate(Database db, DbCommand cmd) -
@itsme86 他使用的语法没有问题。您的建议在功能上是等效的。
-
那篇博文是关于将匿名委托分配给类型为
Delegate的变量,它并没有说不能以这种方式使用delegate关键字。 -
我刚刚尝试了 (db, cmd) =>,这似乎解决了我的问题。