最も簡単な方法はおそらく一部の人々はあなたが3.5から変換する場合(新しい.NET 4.0コンソールプロジェクトを行うだけでテストするためのトラブル、この作業を行うことがあったので
protected override dynamic Get(int id)
{
return Get().FirstOrDefault(x=>x.ID==id);
}
ありますSystem.CoreとMicrosoft.CSharp参照を追加する必要があります)、これをProgram.csに貼り付けます。私がテストした3台のマシンで問題なくコンパイルして実行します。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Dynamic;
namespace ConsoleApplication1
{
internal class Program
{
protected dynamic Get2(int id)
{
Func<dynamic, bool> check = x => x.ID == id;
return Enumerable.FirstOrDefault<dynamic>(this.Get(), check);
}
protected dynamic Get(int id)
{
return Get().FirstOrDefault(x => x.ID == id);
}
internal IEnumerable<dynamic> Get()
{
dynamic a = new ExpandoObject(); a.ID = 1;
dynamic b = new ExpandoObject(); b.ID = 2;
dynamic c = new ExpandoObject(); c.ID = 3;
return new[] { a, b, c };
}
static void Main(string[] args)
{
var program = new Program();
Console.WriteLine(program.Get(2).ID);
Console.WriteLine(program.Get2(2).ID);
}
}
}
コンパイル時にエラーが発生する "ラムダ式を、デリゲートまたは式ツリータイプにキャストしなくても、動的ディスパッチ処理の引数として使用することはできません" – eiu165
@ eui165 .NET 4.0を実行していないと思いますか?私が受け入れられた答えに上記で尋ねたように、Funcは古いDLRの回避策かもしれません。 –
私はここから完全に外れているかもしれません。私はあなたの答えがより良く書かれた方法が好きです。しかし、私はプロジェクトのプロパティを見ていて、ターゲットフレームワークは.Net Framework 4です。まだコンパイル時エラーが出ます。 – eiu165