c# - 在库函数中正确使用泛型 - 如何知道要给出什么类型
问题描述
我正在尝试使用需要在方法调用中指定泛型类型的库函数。
该方法应该打开一个文件并提取一些一维浮点数组并将它们返回到库中定义的字典类型。
该文档没有给出示例,但确实记录了如下语法。我正在尝试使用的方法:
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[])'
我究竟做错了什么?
解决方案
从泛型约束中,您可以看到类型 T 必须是集合类型 ( ICollection, IList, IEnumerable
) 但它还必须实现IStructuralComparable
,IStructuralEquatable
和ICloneable
接口。
据我所知,.Net 框架中没有实现所有这些的类型,因此您的库有一个符合这些要求的集合类型,您必须自己实现它。
推荐阅读
- azure - 如何获取 Azure 通知中心注册的注册或更新日期?
- go - Yocto Build 无法在 InfluxDB 的 Bitbake 配方中执行“go get”命令
- c - 如何检查特定数据类型的输入?
- json - 无法从 START_ARRAY 反序列化“com.dto.Consumption”的实例
- maven - 使用 jfrogcli 时使用自定义 maven 存储库
- accessibility - 如何在不将焦点转移到每个搜索词上的情况下,让 Assistive Technology 可读的搜索词出现?
- google-bigquery - BIgQuery AVRO 外部表架构
- excel - 将鼠标移入文本框或组合框时使单位可见
- python - python中协方差的置信区间
- google-bigquery - 在第一次运行时从查询结果创建表为空表