如何在 C# 方法中传递类型?

How do I pass type in c# methods?

我想写一个方法在我的列表中搜索一个对象,它可以包含多个继承类型。

public class MyClass 
{
   public readonly List<parentType> objects = new List<parentType>();

   public parentType GetObject(Type type, string tag)
   {
       foreach (parentType _object in objects)
       {
           if (_object.GetType() == type)
           {
                if (tag == _object.tag)
                {
                    return _object;
                }
            }
        }
        return null;
    }
}

但是当我调用 .GetObject(childType, "tag") 时,我得到 CS0119:'childType' 是一种无效类型在给定的上下文中.

我该怎么办?谢谢

这里有几种可能性:

  • 使用typeof - GetObject(typeof(childType), "tag")

  • 以通用方式重写您的函数并使用类型作为通用参数

    public parentType GetObject<T>(string tag) where T: parentType
    {
      //use T as the type to search
    }
    

    然后称之为GetObject<childType>("tag");

    在某些情况下,将泛型参数用于return更具体的类型

    可能也很有用
    T GetObject<T>(string tag) where T: parentType
    {
    }
    

    此外(但有点离题)您可以使用 LINQ 获得更简单和惯用的解决方案

    public T GetObject<T>(string tag) where T: parentType
    {
      return objects.OfType<T>().FirstOrDefault(obj => obj.tag == tag);
    }