[英]C# implicit operator MyType(int value) automatically "supports" cast from float
當我實現從 int 到我的類型的轉換運算符時,它似乎“自動”支持從 float 進行轉換。 我不希望我的類型從浮點數隱式轉換。 我什至不希望它從 float 顯式轉換(從 float 定義顯式轉換還不夠好)。
我可以防止這種行為嗎? 是否有一些規范解釋這一點?
原因:我正在嘗試學習/探索確定性定點數學,而從浮點數進行的強制轉換通常是“危險區域”。 Int 強制轉換很好,需要是隱式的。 在需要浮點轉換的情況下,我更喜歡 static 方法來更好地指定意圖,例如: 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!
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.