Как передать тип через функцию и использовать его, чтобы найти все типы переменных? - PullRequest
0 голосов
/ 28 сентября 2019

Для моего проекта на C # у меня есть базовый класс (GameObject) и подклассы / дочерние классы (Ball, Pin, Rope).В показанном коде я пытаюсь выполнить поиск в массиве GameObjects, чтобы получить список, основанный на необходимом типе, который передается через функцию.Я попытался использовать цикл for, чтобы сделать:

_go [i] - это тип

, где тип - это переданный тип, хотя получаю ошибку: невозможно неявно преобразовать тип 'System.Type' вGameObject

Где я ошибаюсь?

    public List<GameObject> ObjectsByType(Type type)
    {
        List<GameObject> gobytype;
        for(int i  = 0; i < _go.Count(); i++)
        {
            if(_go[i] is type)
            {
                //code here....
            }
        }
    }

1 Ответ

0 голосов
/ 28 сентября 2019

Type - это класс, экземпляры которого описывают тип, и это не то же самое, что аргумент типа в универсальной функции, что, вероятно, то, что вам нужно здесь.

Вот небольшой законченный примеррабочего решения:

using System.Collections.Generic;

class GameObject { }
class Ball : GameObject { }
class Rope : GameObject { }

class Program {

    static GameObject[] _go = new GameObject[] {
        new Ball(),
        new Rope()
    };

    static List<TGameObject> ObjectsByType<TGameObject>() where TGameObject : GameObject {
        List<TGameObject> gameObjects = new List<TGameObject>();
        foreach (var gameObject in _go) {
            TGameObject tobj = gameObject as TGameObject;
            if (tobj != null) {
                gameObjects.Add(tobj);
            }
        }
        return gameObjects;
    }

}

Также обратите внимание, что если вы используете LINQ, вы можете сделать что-то вроде этого:

using System.Linq;

    static List<TGameObject> ObjectsByType<TGameObject>() where TGameObject : GameObject {
        return _go.OfType<TGameObject>().ToList();
    }

В этот момент вам практически не нужна функциябольше, и вы можете просто использовать OfType.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...