将变量传递给List.FindAll

时间:2014-08-17 06:39:29

标签: c# findall

我一直在构建一个游戏模板,作为在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上搜索过,目前无法找到我的函数失败原因的答案。

3 个答案:

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