【发布时间】:2022-01-20 23:44:38
【问题描述】:
当我将转换运算符从 int 实现为我的类型时,它似乎“自动”支持从 float 进行转换。我不希望我的类型从浮点数隐式转换!我什至不希望它从 float 显式转换(从 float 定义显式转换还不够好)。
我可以防止这种行为吗? 是否有一些规范解释这一点?
原因:
我正在尝试学习/探索确定性定点数学,并且从浮点数中进行的强制转换通常是“危险区域”。 Int 强制转换很好,需要是隐式的。在需要浮点转换的情况下,我更喜欢静态方法来更好地指定意图,例如:MyNumber.ParseUnsafe(0.1f)。
public struct MyNumber
{
public int raw;
public static implicit operator MyNumber(int x)
{
return new MyNumber { raw = x * 10 };
}
}
public static class Test
{
public static void TestSomething()
{
MyNumber num = (MyNumber)0.1f; // This must be compiler error, but it isn't!
}
}
【问题讨论】:
-
这一定是编译器错误 - 如果你使用不适合 int 的浮点数
标签: c# .net type-conversion integer implicit-conversion