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

问题描述 投票:1回答:1

我正在为更大的整数开发自定义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);”)?这将使得代码非常臃肿,必须在整个地方投射类型。

c# casting mstest implicit xunit
1个回答
1
投票

声明文字时,可以使用suffix声明类型。这使您可以指定没有强制转换的文字类型。

所以也许试试这个:

UInt240 x = 0x7fffffffUL;
Assert.Equal(0x7fffffffUL, x);
© www.soinside.com 2019 - 2024. All rights reserved.