Создание класса в зависимости от универсального типа параметра - PullRequest
0 голосов
/ 16 ноября 2018

Я сейчас бью по стене и не могу найти решение своей проблемы.

Я пытаюсь выбрать класс для создания экземпляра в зависимости от типа моего универсального параметра. Если универсальный класс является классом, создайте экземпляр TestClass; если это структура, создайте экземпляр TestStruct; если это enum, создайте экземпляр TestEnum. Эти три класса наследуются от Test.

Цель этих классов - избежать бокса при сравнении.

Вот как выглядит мой код:

    public static Test<T> Create()
    {
        return Create(default(T));
    }

    private static Test<U> Create<U>(U arg)
        where U : class
    {
        return TestClass<U>.Create();
    }

    private static Test<U> Create<U>(U? arg)
        where U : struct
    {
        return CreateStruct(arg);
    }

    private static Test<U> CreateStruct<U>(U? arg)
        where U : struct
    {
        if (typeof(U).IsEnum)
        {
            return TestEnum<U>.Create();
        }
        return TestStruct<U>.Create();
    }

Я получаю сообщение об ошибке в первой функции Create (): Тип 'T' должен быть ссылочным типом, чтобы использовать его в качестве параметра 'U' в универсальном типе или методе 'Test.Create (U ) '

Что имеет смысл, но как мне заставить его работать? Если я уберу ограничение для второй функции (где U: class), она скомпилируется, но всегда будет вызывать эту функцию, даже если я передам int, например

Я использую Unity, поэтому стандарт C # довольно старый, что не помогает ...

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