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的两种类型是什么?我尝试的转换有什么问题?

C#无法将T强制转换为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));
    } 
}