我有一個閱讀模型爲IQueryable<CustomType>
,我在我的Web應用程序中使用它。很多時候我需要從這個閱讀模型中提取不同的視圖模型。如何在c#中基於通用返回類型模擬方法重載
我用它編寫擴展方法,如:
public static ViewModelA AsViewModelA(this IQueryable<CustomType> query)
{
var vm = view
.Select(x => new ViewModelA
{
Something = x.Something
}).FirstOrDefault();
return vm;
}
public static ViewModelB AsViewModelB(this IQueryable<CustomType> query)
{
var vm = view
.Select(x => new ViewModelB
{
SomethingElse = x.SomethingElse
}).FirstOrDefault();
return vm;
}
該做的工作,但我不喜歡與方法名產生的混亂;一個更通用的方法,這樣的事情將是可取的:
query.AsViewModel<ViewModelA>()
我知道,返回類型不作爲方法的簽名(所以沒有超載適用),我知道泛型類型是不足以使過載。 我會是一個機制,只是模擬基於泛型類型的重載。這種機制應該避免使用if/then/else級聯的主要方法。有一種方法?也許動態?
「TypeA」是否爲'ViewModelA'?每種情況下的實現是什麼樣的? –
@JonSkeet更正了執行 –