Bây giờ đặc biệt là với các chức năng cục bộ, nhưng bạn luôn có thể làm điều đó bằng cách chuyển một đại biểu tạo kiểu ẩn danh.
Vì vậy, nếu mục tiêu của bạn là chạy các logic khác nhau trên cùng một nguồn và có thể kết hợp các kết quả thành một danh sách. Không chắc chắn sắc thái này còn thiếu để đáp ứng mục tiêu đã nêu, nhưng miễn là bạn trả về một T
và chuyển một đại diện để thực hiện T
, bạn có thể trả về một kiểu ẩn danh từ một hàm.
// 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);
}