2016-05-03 14 views
0

一般的な(任意の型の)モデル/クラスをメソッドに渡したいと思います。それを渡す方法?汎用オブジェクトをメソッドに渡す

if(NewUser) 
    MethodA(User); 
else 
    MethodA(UserReg); 

私はいくつかのより多くのコードを追加してみましょう:

private void SetRegionDummy<T>(T obj) 
{ 
    foreach (var lookup in obj) 
    { 
     // but obj.(obj dot) does not give properties of PcvCompleteViewModel 
    } 
} 

//Call this method 
SetRegionDummy(this.PcvCompleteViewModel); 

[Serializable] 
public class PcvCompleteViewModel : StepViewModelBase 
{ 
    #region Constructor 


    #endregion 

    #region Properties 

    public List<ChargeVolume> ChargeVolumes { get; set; } 

    public List<LookUpViewModel> LookUp { get; set; } 
    public List<ProductViewModel> Products { get; set; } 
    public List<ProductViewModel> PricingProducts { get; set; } 
    public List<RegionViewModel> Regions { get; set; } 
    public decimal ContractYears { get; set; }  
    public decimal? PropGrowthRate { get; set; } 
    public decimal? GnicsGrowthRate { get; set; } 
} 

方法は同じですが、異なるオブジェクトモデルを渡す方法?

+2

必要がありません:あなたは、単にパラメータとして、このインターフェイスを使用する方法を作成することができ

public interface IMyInterface { IEnumerable<LookUpViewModel> LookUp { get; set; } } 

:共通のインターフェースで

public class ClassA : IMyInterface { public IEnumerable<LookUpViewModel> LookUp { get; set; } public int MyPropertyA { get; set; } //other properties } public class ClassB : IMyInterface { public IEnumerable<LookUpViewModel> LookUp { get; set; } public string MyPropertyB { get; set; } //other properties } 

:宣言されている。この方法は、あなたのクラスを想定すると、ここに。メソッドのオーバーロードを使用できます。同じ名前で異なるパラメータを持つ2つのメソッド。 –

+0

同じコードで2つのメソッドを作成する必要はありません。 – user662285

+0

'User'と' UserReg'は共通のインターフェースや基本クラスを共有しますか?そうでなければ、ここではジェネリックスの恩恵を受けません。 – Jonesopolis

答えて

0

これはどういう意味ですか?

public void MyMethod<T>(T genericInput) 
{ 
    //do stuff with input 
} 
0

オブジェクトタイプを気にしたい場合は、Genericsを使用します。あなたは、単にobjectにパラメータの種類を変更しない場合

public void MethodA<T>(T obj) { 
    // do stuff 
} 

public void MethodA(object obj) { 
    // do stuff 
} 
0

次のようなメソッドシグネチャ(details on MSDNC#のにおけるジェネリック医薬品は、呼び出し方法で定義することができます:あなたが提供するwhere構文を使用することができ

public void MyMethod<T>(T viewModel) where T : IEnumerable<IViewModel> 
{ 
} 

注意、タイプ制約。

{ 
    var viewModel = GetViewModel(); 
    MyMethod<PcvCompleteViewModel>(viewModel); 
} 
2

どちらも、あなたのクラスは、少なくともインターフェースを共有したり、あなたがそれらの間で共有されるようにしたいか、他あなたはされませんプロパティを宣言し、共通の基本クラスから継承しなければなりません。そして、あなたはそうのようにこれを呼び出すことができますこのプロパティを使用するメソッドを作成することができます。

あなたの例では、ジェネリックはまったく必要ありません。ジェネリック医薬品のための

private void SetRegionDummy(IMyInterface obj) 
{ 
    foreach (var lookup in obj.LookUp) 
    { 
     DoWork(lookup); 
    } 
} 
関連する問題