我无法在此代码中找到错误,错误对我没有多大帮助:
public class Track<T> {
readonly List<Key<T>> _keys = new List<Key<T>>();
public void AddKey<T>(float time, T value) {
var key = new Key<T> {
Time = time,
Value = value
};
_keys.Add(key); // <== Error: cannot convert Key<T> expression to type Key<T>
}
}
public struct Key<T> {
public float Time;
public T Value;
}
答案 0 :(得分:1)
您已在方法中重新定义模板:
// Here's one "T"
public class Track<T> {
readonly List<Key<T>> _keys = new List<Key<T>>();
// ... And here is a different "T" which hides original (from Track<T>) one
// the declaration equals to
// public void AddKey<K>(float time, K value) {
public void AddKey<T>(float time, T value) {
// T has been redefined, so "new Key<T>" (with redefined T)
// is not equal to Key<T> from List<Key<T>> _keys which uses class template T
...
}
}
尝试从方法中移除 T
:
public class Track<T> {
...
// No "<T>" declaration here, uses "T" from Track<T>
public void AddKey(float time, T value) {
...
}
}
答案 1 :(得分:0)
之所以这样,是因为您定义了模板类AND模板方法。如果您将其更改为AddKey<K>
,您将理解我在说什么。
尝试改变它:
public class Track<T> {
readonly List<Key<T>> _keys = new List<Key<T>>();
public void AddKey(float time, T value) {
var key = new Key<T> {
Time = time,
Value = value
};
_keys.Add(key); // <== Error: cannot convert Key<T> expression to type Key<T>
}
}
public struct Key<T> {
public float Time;
public T Value;
}
答案 2 :(得分:0)
T
方法中的AddKey
类型与T
类的泛型类型参数Track<T>
的类型不同。
因此,变量key
的类型是Key<T>
,其中T
在方法范围内定义。但是,_keys.Add
需要类型Key<T>
的参数,其中T
在类声明中定义。这就是错误出现的原因。
要解决此问题,只需从方法中删除T
,使其如下所示:
public void AddKey(float time, T value) {
现在T
中的T value
引用了类的泛型类型参数,因为它没有可以引用的其他T
!