我一直在构建一个游戏模板,作为在C#上测试我新学习能力的一种方法,我一直在研究一个从另一个列表对象返回一个对象列表的方法。但我只想要一个特定对象的列表(类型作为参数输入)
newObjectList = area.getSpecificObjects(Tile)
我参与了这个功能
public List<Object> getSpecificObjects(System.Type type)
{
List<Object> searchObjects = objects.Objects; //Returns a List of Objects from the class ObjectList
System.Type searchType = type;
return (searchObjects.FindAll(
delegate(Object obj)
{
return obj is searchType;
})
);
}
但是我生成方法的尝试失败了。 &#34; searchtype&#34;委托部分中的变量不断返回错误&#34;类型或命名空间名称&#39; type / namespace&#39;找不到(你是否错过了使用指令或汇编引用?&#34;
任何人都可以推荐一种正确的方式来编写这样的功能,或者告诉我为什么我的尝试失败了?理想情况下,后者,因为我可以这样学习更多。我在StackOverflow上搜索过,目前无法找到我的函数失败原因的答案。
答案 0 :(得分:2)
is
是一个“编译时”运算符,这意味着您不能将它与Type
类型的对象一起使用。
这是实现方法的正确方法:
public class Finder
{
public static List<T> GetSpecificObjects<T>(List<Object> source)
{
return (List<T>) source.Where(item => item.GetType() == typeof (T));
}
}
Ofc,如果您不知道编译时输入,可以使用Type
的实现
public static List<Object> GetSpecificObjects(Type t, List<Object> source)
{
return source.Where(item => item.GetType() == t).ToList();
}
答案 1 :(得分:2)
因为您不想使用LINQ或Generics,但这里是您的代码的工作版本:
newObjectList = area.getSpecificObjects(typeof(Tile));
public List<Object> getSpecificObjects(System.Type searchType)
{
List<Object> searchObjects = objects.Objects; //Returns a List of Objects from the class ObjectList
return (searchObjects.FindAll(
delegate(Object obj)
{
return obj.GetType() == searchType;
})
);
}
PS:您已将LINQ用于.FindAll
;)
答案 2 :(得分:0)
感谢大家的帮助。这就是你帮助我制作的东西。
public List<Object> getSpecificObjects(System.Type type)
{
List<Object> searchObjects = objects.Objects; //Returns a List of Objects from the class ObjectList
System.Type searchType = type;
return (searchObjects.FindAll(x => x.GetType() == searchType));
}