C#无法将T转换为T.

Joe*_*Joe 4 c# collections delegates casting

我有一个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)
    }
}
Run Code Online (Sandbox Code Playgroud)

这给了我一个我以前从未见过的错误:

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

这两种T类型是什么?我正在尝试的转换有什么问题?

Ter*_*kel 7

你的问题是类型参数T in

class MyCollection<T>
Run Code Online (Sandbox Code Playgroud)

与T in的类型参数不同

Apply<T, S>
Run Code Online (Sandbox Code Playgroud)

所以你function需要的是另一种类型value

如果你改变

Apply<T, S>
Run Code Online (Sandbox Code Playgroud)

Apply<S>
Run Code Online (Sandbox Code Playgroud)

你的代码将编译


C.E*_*uis 5

一个T来自MyCollection<T>,一个来自Apply<T, S>.Apply<S>应该足够了.