Я занимаюсь разработкой пользовательских классов Int / UInt для больших целых чисел.Они прекрасно работают с присваиванием / приведением / арифметикой и т. Д. Однако, это выявило проблему, которая возникает с xunit и MSTest.
Вот мой код:
UInt240 x = 0x7fffffff;
Assert.Equal(0x7fffffff, x);
Проблема в том, что если я предоставлю тип без знака на правой стороне, и предоставлю литерал на левой стороне, он будет интерпретировать литерал как"int" (или соответствующий тип со знаком, который может содержать значение) и не может быть приведен к типу без знака (поскольку C # неявно приводит тип к знаку без знака, а xunit пытается неявно привести к общему типу),MSTest разрешит это, интерпретируя оба объекта как «объектные» объекты, но выдаст ошибку, потому что, хотя значения совпадают, типы различаются.
То же самое обычно происходит и с примитивами:
ulong x = 0x7fffffff;
Assert.Equal(0x7fffffff, x);
IsЕсть ли что-нибудь, что я могу сделать, чтобы избежать неявного приведения (например: "Assert.Equal ((ulong) 0x7fffffff, x);")?Это сделало бы код ужасно раздутым из-за того, что ему приходилось приводить типы везде.