C # не может привести T к T - PullRequest
       36

C # не может привести T к T

4 голосов
/ 17 февраля 2012

У меня есть общая коллекция MyCollection<T>, которую я создал, и все отлично работает, кроме этой новой функции Apply, которую я добавляю:

class MyCollection<T> {
    T value;
    public MyCollection(T starter) { value = starter; }
    public MyCollection<S> Apply<T, S>(Func<T, S> function) {
        return new MyCollection<S>(function(value));  // error in function(value)
    }
}

Это дает мне ошибку, которую я никогда раньше не видел:

Argument 1: cannot convert from 'T' to 'T [C:\folder\code.cs (line number)]'

Какие бывают два типа T? Что не так с конверсией, которую я пытаюсь сделать?

Ответы [ 3 ]

7 голосов
/ 17 февраля 2012

Ваша проблема в том, что параметр типа T в

class MyCollection<T>

не является тем же параметром типа, что и параметр T в

Apply<T, S>

, поэтому ваш function принимает другой тип, чем типиз value

, если вы измените

Apply<T, S>

на

Apply<S>

, ваш код будет скомпилирован

5 голосов
/ 17 февраля 2012

Один T взят из MyCollection<T> и один из Apply<T, S>. Apply<S> должно хватить.

1 голос
/ 17 февраля 2012

Он пытается преобразовать универсальный тип класса в универсальный тип метода.Удалите T из подписи метода Apply.

class MyCollection<T> {
    T value;
    public MyCollection(T starter) { value = starter; }
    public MyCollection<S> Apply<S>(Func<T, S> function) {
        return new MyCollection<S>(function(value));
    } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...