隐式强制转换问题(整数文字)

时间:2018-09-19 00:02:56

标签: c# casting mstest implicit xunit

我正在为更大的整数开发自定义Int / UInt类。它们非常适合分配/广播/算术等。但是,它暴露了xunit和MSTest出现的问题。

这是我的代码:

UInt240 x = 0x7fffffff;
Assert.Equal(0x7fffffff, x);

问题是,如果我在右侧提供一个无符号类型,在左侧提供一个文字,它将把该文字解释为“ int”(或可以容纳该值的相关带符号类型),并且不能强制转换为无符号类型(因为C#不会隐式转换为无符号类型,并且xunit试图隐式转换为常见类型)。 MSTest将允许它,将它们都解释为“对象”对象,但是会出错,因为尽管值匹配,但类型不同。

与原语相同的情况也是如此:

ulong x = 0x7fffffff;
Assert.Equal(0x7fffffff, x);

有什么办法可以避免隐式转换(即:“ Assert.Equal((ulong)0x7fffffff,x);”)吗?这将使代码非常膨胀,不得不在各处转换类型。

1 个答案:

答案 0 :(得分:1)

声明文字时,可以使用suffix声明类型。这样,您就可以指定文字的类型而无需强制转换。

所以也许试试这个:

UInt240 x = 0x7fffffffUL;
Assert.Equal(0x7fffffffUL, x);