Как заставить компилятор C# выводить универсальные типы?

Перейдите прямо к документам W3C. Они время от времени являются немного загадочными, но они - основательная документация.

Для причуд, очевидно, сайты как Quirksmode хороши. Но только как только Вы прочитали фактическую документацию W3C.

6
задан Peter Mortensen 14 July 2015 в 23:27
поделиться

2 ответа

Спецификация C # не позволяет выводить половину аргументов типа. Вы должны либо позволить компилятору вывести все аргументы типа (что не всегда применимо, как в вашем случае), либо вручную указать их все.

ОБНОВЛЕНИЕ (ответ на комментарий): Пока меня нет команда C #, чтобы дать абсолютный ответ на ваш вопрос, я предполагаю, что сложность разрешения перегрузки (которая уже является умопомрачительной; вы знаете, что если вы прочтете этот раздел спецификации C #), значительно увеличилась бы, если бы они хотели разрешить половину типов, которые должны быть выведены, и наполовину нет (особенно с учетом того факта, что вы можете перегружать методы только количеством общих аргументов).

8
ответ дан 10 December 2019 в 02:51
поделиться

Это зависит .. .

Если вы просто используете SomeGenericType , вы можете сделать:

public TResult Get<TResult>() where TResult : IConvertible {
    SomeGenericType<TResult> myInstance = ...
    //...code that sets someValue...
    return (TResult) someValue;
}

В этом случае не обязательно есть способ поместить туда первый тип. Поскольку ваш пример не передает SomeGenericType явно в качестве параметра, он предполагает, что это возможно.

В противном случае вам необходимо полностью указать все ваши общие аргументы. К сожалению, это '

1
ответ дан 10 December 2019 в 02:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: