在我的项目中,我有一些类似的功能:
func 1(包含2个类:class1和classs1_1):
List<class1> GetData1(class1_1 cls)
{
List<class1> list = new List<class1>();
cls = new cls();
//do something for cls, like cls.GetSpecialCase();
//fill data from cls to list, as using foreach to fill data to list
return list;
}
func 2(包含2个类:class2和classs2_2):
List<class2> GetData2(class2_2 cls)
{
List<class2> list = new List<class2>();
cls = new cls();
//do something for cls, like cls.GetSpecialCase();
//fill data from cls to list, as using foreach to fill data to list
return list;
}
我怎么能写这样的函数(因为我不想使用上面的很多函数):
common func(T为class1,object cls为class1_1):
List<T> GetData(object cls)
{
List<T> list = new List<T>();
//how to recognize which class of cls
if(cls == class1_1) class1_1 other_cls = cls as class1_1;
if(cls == class2_2) class2_2 other_cls = cls as class2_2;
//do something for other_cls
//fill data from other_cls to list
return list;
}
我只想将参数作为对象传递,并且在常用函数中,我想知道我传递给哪个类,以便我可以对待正确的类,并调用正确的函数。
任何人都可以帮助我解决这个问题。
非常感谢。
答案 0 :(得分:3)
听起来你需要:
GetSpecialCase
方法的通用方法(包含输入和输出的类型参数)
List<TResult> GetData<T, TResult>(T item) where T : ISpecialCase<TResult>
{
List<TResult> list = new List<TResult>();
var other = item.GetSpecialCase();
// Fill list via other
return list;
}
如果您不能引入接口或基类,可以使用动态类型,但我强烈建议您使用多态来表达不同类中的内容如果可能的话,可以使用common {GetSpecialCase
。
答案 1 :(得分:0)
您也可以使用泛型作为输入类型。 你的代码可能是这样的:
List<T> GetData<T>(T cls)
{
List<T> list = new List<T>();
//no need to recognize which class of cls
//do something for other_cls
//fill data from other_cls to list
return list;
}
并且两个类都需要实现相同的接口,因此您不需要知道它是哪种类型......