0

我有两个类:媒体和容器。

我有两个列表List<Media>List<Container>

我将这些列表传递给另一个函数(一次一个);

它可以是一个或另一个;

检查列表的“模板”类型的正确方法是什么,以便我可以根据列表类型调用关联方法?

还是我应该尝试投射到 List<> 并在其周围放置 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");
4

4 回答 4

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
}
于 2008-12-10T20:03:35.967 回答
3

您可以使用 Type 类型的 GetGenericArguments 方法,如下所示:

对象[] 模板 = myObject.GetType().GetGenericArguments();

于 2008-12-10T20:08:08.547 回答
2

大卫所说的。

但如果这必须通过相同的功能,typeof操作员应该提供帮助。此外,这听起来更像是您存在架构缺陷。Media 类与 Container 类有什么关系?是否有一些他们应该实现的共同接口?

于 2008-12-10T20:05:42.280 回答
0

嗯,这取决于你的“//do this”方法是什么......如果它是一个在 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 类中调用适当的实现,而无需编写代码来区分它们...

于 2008-12-10T20:22:24.743 回答