私はIQueryable<CustomType>
という読み込みモデルを持っています。私は、このモデルから別のView Modelを抽出する必要があります。私は次のように拡張メソッドを記述するために使用一般的な戻り値の型に基づいてメソッドのオーバーロードをシミュレートする方法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実装で修正されました –