我正在尝试使用需要在方法调用中指定泛型类型的库函数。
该方法应打开一个文件并提取大量一维浮点数组,并将它们返回给库中定义的一种字典。
该文档未提供示例,但确实记录了以下语法。 我正在尝试使用的方法:
public static NpzDictionary<T> Load<T>(byte[] bytes)
where T : class, ICloneable, IList, ICollection, IEnumerable,
IStructuralComparable, IStructuralEquatable
http://accord-framework.net/docs/html/M_Accord_IO_NpzFormat_Load__1.htm
其中NpzDictionary类型定义为:
public class NpzDictionary<T> : IDisposable,
IEnumerable
where T : class, ICloneable, IList, ICollection, IEnumerable, IStructuralComparable, IStructuralEquatab
http://accord-framework.net/docs/html/T_Accord_IO_NpzDictionary_1.htm
这里说T是要加载的数组的类型。
我期望使用浮点数组,所以我输入:
var ret = NpzFormat.Load<float>(byte_array);
但是我遇到以下错误:
The type 'float' must be a reference type in order to use it as parameter 'T' in the generic type or method 'NpzFormat.Load<T>(byte[])'
我在做什么错了?
答案 0 :(得分:0)
从一般约束中可以看到,类型T必须是集合类型(ICollection, IList, IEnumerable
),但它也必须实现IStructuralComparable
,IStructuralEquatable
和ICloneable
接口。
据我所知,.Net框架中没有可实现所有这些类型的类型,因此您的库中有一个符合您自己实现这些要求的集合类型。