C# 代表制。行动<;动态,int>;不接受'1';论据
我试图从Mono上构建C# 代表制。行动<;动态,int>;不接受'1';论据,c#,entity-framework,postgresql,lambda,mono,C#,Entity Framework,Postgresql,Lambda,Mono,我试图从Mono上构建PostgreSqlGeneration代码。不幸的是,我得到了一个错误,我不明白 在类中,以下方法给出生成错误“委托系统。操作不接受'1'参数”: 我不知道为什么会发生这种情况,因为每个只有一个动态类型,没有整数。但我对这种lambda表达式没有太多经验。要了解更多信息并使迁移正常运行,我希望有人能解释错误发生的原因以及如何修复错误。免责声明:我感到非常遗憾,我找不到任何可以解释错误原因的东西。如果有人知道;请告诉我。谷歌在这方面失败了 显然,编译器为每个选择了错误的重载
PostgreSqlGeneration
代码。不幸的是,我得到了一个错误,我不明白
在类中,以下方法给出生成错误“委托系统。操作不接受'1'参数”:
我不知道为什么会发生这种情况,因为每个
只有一个动态
类型,没有整数。但我对这种lambda表达式没有太多经验。要了解更多信息并使迁移正常运行,我希望有人能解释错误发生的原因以及如何修复错误。免责声明:我感到非常遗憾,我找不到任何可以解释错误原因的东西。如果有人知道;请告诉我。谷歌在这方面失败了
显然,编译器为每个选择了错误的重载。库中有两个,一个执行操作
,另一个执行操作
如果您没有使用动态它会工作得很好(如果我不得不猜测的话);但是dynamic
引发了各种奇怪的问题;另外,你正在使用单声道
由于编译器坚持使用另一个重载,因此解决方案非常简单。就用它吧
DetectHistoryRebuild(migrationOperations).Each<dynamic>((o, i) => Generate(o));
解决方案是添加缺少的程序集引用Microsoft.Csharp.dll
。由于某种原因,将lambda签名从i
更改为(i,j)
,如BradleyDotNET在其回答中所建议的,丢失程序集引用的错误变得可见。@BradleyDotNET我将签名放入问题中。好的,谢谢。我看不出它为什么会要求一个int
。它似乎使用了一个带有错误签名的扩展方法?什么是Generate
?声明在哪里?你确定只需要一个论点吗?看起来有可能是这里使用的Each()
的第一个重载。我99%确定它会崩溃,因为它由于动态
参数选择了错误的重载,但我找不到任何文档解释原因。谢谢。现在错误(在同一行)是委托系统。Func不接受'2'参数
。@user2609980哇;做你真糟糕。请尝试我的新建议并直接实例化操作。@user2609980它应该是每个((o,i)=>…)
。有两个重载,每个重载都带有一个通用参数。有两个通用参数的是一个你不感兴趣的重载。@hvd我同意;但这似乎不起作用。@user2609980嘿,我想这是一个进步,至少与您当前的问题完全无关。:)
private void Generate(HistoryOperation migration)
{
//migration
Check.NotNull(migration, "historyOperation");
using (var writer = Writer())
{
migration.CommandTrees.Each(
commandTree =>
{
switch (commandTree.CommandTreeKind)
{
case DbCommandTreeKind.Insert:
writer.Write(GetInsertHistorySql((DbInsertCommandTree)commandTree));
break;
}
});
Statement(writer);
}
}
DetectHistoryRebuild(migrationOperations).Each<dynamic>((o, i) => Generate(o));
DetectHistoryRebuild(migrationOperations).Each<dynamic>(new Action(o => Generate(o)));