2016-06-13 7 views
0

私は1つのビューモデルを受け入れるメソッドを持っています。私は別のviewmodelのために同じメソッドを複製する必要があります。私はfunctionname(tモデル)のようなものを試しましたが、それは仕事をしませんでした。私はジェネリックスに新しいです。 は、いくつかのいずれかは、私は別のメソッド名と同じコードをコピー&ペーストすることを強制しています私メソッドを異なるビューモデルに汎用化する

 private void SetUpUserTypeDropDown(RegisterViewModel model) 
    { 
     var usertypes = GetuserTypes(); 
     model.UserTypes = new List<SelectListItem> { }; 
     usertypes.ForEach(t => model.UserTypes.Add(new SelectListItem() { Text = t.Text, Value = t.Value })); 
    } 


    private void SetUpUserforBackOfficeTypeDropDown(BackOfficeViewModel model) 
    { 
     var usertypes = GetuserTypes(); 
     model.UserTypes = new List<SelectListItem> { }; 
     usertypes.ForEach(t => model.UserTypes.Add(new SelectListItem() { Text = t.Text, Value = t.Value })); 
    } 
     private void SetUpProfileTypeDropDown(MyProfileViewModel model) 
    { 
     var usertypes = GetuserTypes(); 
     model.UserTypes = new List<SelectListItem> { }; 
     usertypes.ForEach(t => model.UserTypes.Add(new SelectListItem() { Text = t.Text, Value = t.Value })); 
    } 

助けることができます。私はすべてのあなたの*ViewModel -classesはあなたがすべての基本クラスを作成する方法について考えることができますList<SelectListItem>タイプのUserTypesという名前のプロパティを持っているので、一般的な入力として

+0

あなたの 'ViewModel'はすべて特異なインターフェースから継承していると思いますか? –

+0

共通のフィールドを持つ抽象ビューモデルを構築する必要があります。 – lem2802

答えて

2

を入力ビューモデルを持っている一般的な方法を作るためにどのようにこの点でいくつかの助けを得ることができます*ViewModel S:

public class ViewModelBase 
{ 
    public List<SelectListItem> UserTypes { get; set; } 
    // ... further code? 
} 

例えば、そのようなクラスから自分のビューモデルを継承:

public class RegisterViewModel : ViewModelBase 
{ 
    // implement specific behaviour 
} 

次に、あなたの方法は、一般的なである必要はありませんが、簡単に取ることができますパラメータとしてViewModelBase:ちょうど完全性について

private void SetUpUserType(ViewModelBase model) 
{ 
    var usertypes = GetuserTypes(); 
    model.UserTypes = new List<SelectListItem> { }; 
    usertypes.ForEach(t => model.UserTypes.Add(new SelectListItem() { Text = t.Text, Value = t.Value })); 
} 

、あなたこの方法は一般的なことができます:

private void SetUpUserType<T>(T model) where T : ViewModelBase 
{ 
    var usertypes = GetuserTypes(); 
    model.UserTypes = new List<SelectListItem> { }; 
    usertypes.ForEach(t => model.UserTypes.Add(new SelectListItem() { Text = t.Text, Value = t.Value })); 
} 

、それが由来タイプだことを確認するために、制約(where T : ViewModelBase)を使用しますViewModelBaseをサポートしています。UserTypes

+0

これは正しい解決策であり、ジェネリックスを使用するのではなく、継承ベースのテクニックを使用します。ジェネリックを使うこともできますが、重要なのはモデルがViewModelBaseを継承することだけですので、ここでそれらを使用する理由はありません。 – TwistedStem

関連する問題