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

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);