c# - 通用结构的转换运算符是否合法?
问题描述
问题是:通用结构的转换运算符是一个可行的选择还是只是一个定义不足的极端情况?
我在这里的具体用例情况是我有一组结构来表示物理 SI 单位类型(每个类型都有显式运算符和它们之间的转换运算符)。它工作得很好,直到出现了为它们制作通用 3d 向量的新要求 + 使用转换运算符来支持可读的算术语法 ( (m)1.3 + (km)0.041
)。
但。CS0556告诉我"conversion must convert to or from enclosing type"
——这一切都很好,直到人们意识到这对于通用结构来说甚至是不可能的。因为虽然VECTOR<km>
和之间的转换在VECTOR<T>
技术上可能是合法的定义 - 如果你不知道这两种类型,那几乎没有用处。
public struct VECTOR<T>
{
public double3 Value;
// I wanted to define all possible conversions this way, but suddenly:
// (CS0556) user-defined conversion must convert to or from enclosing type
public static implicit operator VECTOR<m> ( VECTOR<km> val ) => new VECTOR<m>{ Value = val.Value * 1e+3 };
}
我知道这可以重构为类 - 但我需要将其保留为结构。并且可以将转换重构为方法 - 但运算符最类似于数学且可读性强,我想保留它们。看起来像一个死胡同。有什么想法、想法吗?
解决方案
推荐阅读
- r - 将变音符号保存在 R 中的 .csv 中
- excel - Excel - 将文本反转为列
- c# - 调用 transform.Translate 时播放器不移动
- postgresql - 使用 GORM 从 JoinTable 获取具有顺序的关联对象
- wildcard - Snakemake 在新规则中指定新通配符
- python - 如何从主函数返回字符串?
- javascript - jQuery/Javascript - 如何在所有浏览器(尤其是 Safari)中获取与 CSS 断点一致的浏览器窗口宽度?
- r - 如何排除故障:RODBC 错误:状态 08001,代码 0,
- python - 从两个坐标和角恢复第三个坐标
- java - 如何返回带有回调的文档快照对象并实际上能够访问/将其传递给其他层?