Невозможно неявно преобразовать тип в параметр типа - C# generics - PullRequest
0 голосов
/ 26 апреля 2020

Я объявил метод с параметрами типа ввода и вывода. Я наложил некоторые ограничения на эти типы. См. Код ниже.

class Input { public int I { get; set; } }
    class InputType1 : Input { }
    class InputType2 : Input { }

    class Output { public int O { get; set; } }
    class OutputType1 : Output { }

    static TOutput Method<TInput, TOutput>(TInput input) 
        where TInput : Input 
        where TOutput : Output
    {
        var output = new Output() { O = input.I * 2 };
        return output; //  compile error: connot do conversion implicitly
    }

Почему преобразование может быть выполнено неявно для переменной 'input', а не для переменной 'output'?

1 Ответ

1 голос
/ 26 апреля 2020

Компилятор не может определить конкретный тип Output. Единственное, что компилятору известно, возвращаемый тип - это какой-то тип, который наследуется от Output.

Чтобы создать экземпляр TOuptut, измените код на

static TOutput Method<TInput, TOutput>(TInput input) 
        where TInput : Input 
        where TOutput : Output, new()
    {
        var output = new TOutput() { O = input.I * 2 };
        return output;
    }

Обратите внимание, что ограничение new() требует, чтобы конструктор без параметров существовал в TOutput.

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