Sekarang dengan fungsi lokal khususnya, tetapi Anda selalu dapat melakukannya dengan mengirimkan delegasi yang membuat tipe anonim.
Jadi, jika tujuan Anda adalah menjalankan logika yang berbeda pada sumber yang sama, dan dapat menggabungkan hasil ke dalam satu daftar. Tidak yakin nuansa apa yang hilang ini untuk memenuhi tujuan yang dinyatakan, tetapi selama Anda mengembalikan T
dan mengirimkan delegasi untuk membuatnya T
, Anda dapat mengembalikan tipe anonim dari suatu fungsi.
// returning an anonymous type
// look mom no casting
void LookMyChildReturnsAnAnonICanConsume()
{
// if C# had first class functions you could do
// var anonyFunc = (name:string,id:int) => new {Name=name,Id=id};
var items = new[] { new { Item1 = "hello", Item2 = 3 } };
var itemsProjection =items.Select(x => SomeLogic(x.Item1, x.Item2, (y, i) => new { Word = y, Count = i} ));
// same projection = same type
var otherSourceProjection = SomeOtherSource((y,i) => new {Word=y,Count=i});
var q =
from anony1 in itemsProjection
join anony2 in otherSourceProjection
on anony1.Word equals anony2.Word
select new {anony1.Word,Source1Count=anony1.Count,Source2Count=anony2.Count};
var togetherForever = itemsProjection.Concat(otherSourceProjection).ToList();
}
T SomeLogic<T>(string item1, int item2, Func<string,int,T> f){
return f(item1,item2);
}
IEnumerable<T> SomeOtherSource<T>(Func<string,int,T> f){
var dbValues = new []{Tuple.Create("hello",1), Tuple.Create("bye",2)};
foreach(var x in dbValues)
yield return f(x.Item1,x.Item2);
}