我有一个我已经制作的通用集合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
类型是什么?我正在尝试的转换有什么问题?
答案 0 :(得分:7)
你的问题是
中的类型参数T.class MyCollection<T>
与
中的T不是相同的类型参数Apply<T, S>
因此function
采用的不是value
如果你改变了
Apply<T, S>
到
Apply<S>
您的代码将编译
答案 1 :(得分:5)
一个T来自MyCollection<T>
,一个来自Apply<T, S>
。 Apply<S>
就足够了。
答案 2 :(得分:1)
它正在尝试将类的泛型类型转换为方法的泛型类型。从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));
}
}