提问人:Matěj Vondráček 提问时间:5/22/2022 最后编辑:Matěj Vondráček 更新时间:5/22/2022 访问量:53
如何在 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”是一个类型,在给定的上下文中无效。
我该怎么办?谢谢。
答:
0赞
Serg
5/22/2022
#1
这里有几种可能性:
用
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); }
评论
0赞
Matěj Vondráček
5/22/2022
谢谢,这真的帮助了:)。当 linq 选项在列表中找不到对象时,它是否仍返回 null?
0赞
Serg
5/22/2022
是的,确实如此。如果未找到任何内容或集合为空,则 LINQ 将返回。在您的情况下(因为 是类或其他引用类型),它将在未找到任何内容时返回,因为引用类型的默认值是 。FirstOrDefault
default(T)
parentType
null
null
评论
.GetObject(typeof(childType), "tag")
?childType