我想将泛型(可以是任何类型)模型/类传递给方法。如何通过?
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; }
}
方法是一样的但是如何传递不同的对象模型?
答案 0 :(得分:2)
您的类必须至少共享一个接口,或者从公共基类继承,声明要在它们之间共享的属性,否则您将无法创建使用此属性的方法。
在您的示例中,您根本不需要泛型。假设您的课程以这种方式宣布:
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
}
使用通用界面:
public interface IMyInterface {
IEnumerable<LookUpViewModel> LookUp { get; set; }
}
您只需创建一个使用此接口作为参数的方法:
private void SetRegionDummy(IMyInterface obj)
{
foreach (var lookup in obj.LookUp)
{
DoWork(lookup);
}
}
答案 1 :(得分:0)
你是说这个吗?
public void MyMethod<T>(T genericInput)
{
//do stuff with input
}
答案 2 :(得分:0)
如果您想关注对象类型,请使用Generics。
public void MethodA<T>(T obj) {
// do stuff
}
如果您不这样做,只需将参数类型更改为object
。
public void MethodA(object obj) {
// do stuff
}
答案 3 :(得分:0)
C#中的泛型可以通过调用方法定义,当方法签名如下所示(details on MSDN)时:
public void MyMethod<T>(T viewModel) where T : IEnumerable<IViewModel>
{
}
请注意,您可以使用where
语法来提供类型约束。然后你可以像这样调用它:
{
var viewModel = GetViewModel();
MyMethod<PcvCompleteViewModel>(viewModel );
}