C#无法将T强制转换为T
本文关键字:转换 | 更新日期: 2023-09-27 18:24:50
我有一个通用集合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
的两种类型是什么?我尝试的转换有什么问题?
您的问题是中的类型参数T
class MyCollection<T>
与中的T不是同一类型参数
Apply<T, S>
所以你的function
采用了value
之外的另一种类型
如果您更改
Apply<T, S>
至
Apply<S>
您的代码将编译
一个T来自MyCollection<T>
,一个来自Apply<T, S>
。Apply<S>
就足够了。
它试图将类的泛型类型强制转换为方法的泛型类型。从Apply
方法的签名中删除T
。
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));
}
}