代码之家  ›  专栏  ›  技术社区  ›  Matěj Vondráček

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

  •  0
  • Matěj Vondráček  · 技术社区  · 3 年前

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

    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(子类型,“标记”) 我得到CS0119: “childType”是在给定上下文中无效的类型

    我该怎么办?谢谢

    1 回复  |  直到 3 年前
        1
  •  0
  •   Serg    3 年前

    这里有几种可能性:

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

    • 以泛型方式重写函数,并将类型用作泛型参数

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

      然后叫它 GetObject<childType>("tag");

      在某些情况下,也可以使用泛型参数返回更具体的类型

      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);
      }