隐式转换问题(整数文字)
Implicit Casting Issues (Integer literals)
我正在为更大的整数开发自定义 Int/UInt 类。它们与 assignment/casting/arithmetic 等配合使用效果很好。但是,它暴露了 xunit 和 MSTest 出现的问题。
这是我的代码:
UInt240 x = 0x7fffffff;
Assert.Equal(0x7fffffff, x);
问题是,如果我在右侧提供无符号类型,并在左侧提供文字,它会将文字解释为 "int"(或可以容纳值),并且无法转换为无符号类型(因为 C# 不会将有符号隐式转换为无符号类型,而 xunit 试图隐式转换为通用类型)。 MSTest 将允许它,将两者解释为 "object" 个对象,但会出错,因为尽管值匹配,但类型不同。
原语通常也会发生同样的情况:
ulong x = 0x7fffffff;
Assert.Equal(0x7fffffff, x);
我能做些什么来避免隐式转换(即:"Assert.Equal((ulong)0x7fffffff, x);")?这会使代码变得非常臃肿,不得不到处转换类型。
声明文字时,可以使用 suffix 声明类型。这使您可以指定文字的类型而无需强制转换。
也许试试这个:
UInt240 x = 0x7fffffffUL;
Assert.Equal(0x7fffffffUL, x);
我正在为更大的整数开发自定义 Int/UInt 类。它们与 assignment/casting/arithmetic 等配合使用效果很好。但是,它暴露了 xunit 和 MSTest 出现的问题。
这是我的代码:
UInt240 x = 0x7fffffff;
Assert.Equal(0x7fffffff, x);
问题是,如果我在右侧提供无符号类型,并在左侧提供文字,它会将文字解释为 "int"(或可以容纳值),并且无法转换为无符号类型(因为 C# 不会将有符号隐式转换为无符号类型,而 xunit 试图隐式转换为通用类型)。 MSTest 将允许它,将两者解释为 "object" 个对象,但会出错,因为尽管值匹配,但类型不同。
原语通常也会发生同样的情况:
ulong x = 0x7fffffff;
Assert.Equal(0x7fffffff, x);
我能做些什么来避免隐式转换(即:"Assert.Equal((ulong)0x7fffffff, x);")?这会使代码变得非常臃肿,不得不到处转换类型。
声明文字时,可以使用 suffix 声明类型。这使您可以指定文字的类型而无需强制转换。
也许试试这个:
UInt240 x = 0x7fffffffUL;
Assert.Equal(0x7fffffffUL, x);