如何在 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);
}
我想写一个方法在我的列表中搜索一个对象,它可以包含多个继承类型。
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); }