我有两个类:Media和Container。
我有两个列表List<Media>
和List<Container>
我将这些列表传递给另一个函数(一次一个);
它可以是一个或另一个;
检查列表的“模板”类型的正确方法是什么,这样我可以根据列表类型调用一个相关的方法?
或者我应该尝试转换为List&lt;&gt;并把Try / Catch块放在它周围?
Object tagObj = mediaFlow1.BackButton.Tag;
if (tagObj == Media)
//do this
else if (tagObj == Container)
//do this
else
throw new Exception("Not a recognized type");
答案 0 :(得分:11)
正确的做法是为此函数设置两个重载,接受每种类型:
public void MyMethod(List<Media> source)
{
//do stuff with a Media List
}
public void MyMethod(List<Container> source)
{
//do stuff with a Container List
}
答案 1 :(得分:3)
您可以使用Type类型的GetGenericArguments方法,如下所示:
object [] templates = myObject.GetType()。GetGenericArguments();
答案 2 :(得分:2)
大卫说的话。
但如果必须通过相同的功能,typeof
运算符应该有帮助。此外,这听起来更像是你有一个建筑缺陷。 Media类与Container类有什么关系?他们应该实现两种共同的接口吗?
答案 3 :(得分:0)
嗯,这取决于你的“//做这个”方法是什么......如果它是一个在Media或Container对象上运行的方法,并根据它做不同的事情,那么你应该放那些类中的那个方法......
声明名为ICanDoThis的接口
public interface ICanDoThis { void DoThis(); }
确保Media和Container都实现该接口
public class Media: ICanDoThis { // }
public class Container: ICanDoThis { // }
然后,在您的客户端代码“其他功能”中,您可以
public void OtherFunction(List<ICanDoThis> list)
{
foreach(ICanDoThis obj in list)
obj.DoThis();
}
就是这样......这段代码将在Media Class或Container类中调用相应的实现,具体取决于实际对象的具体类型,而不必编写代码来区分它们......