鑑於此代碼段int - > sbyte - > sbyte的顯式轉換?
[TestMethod]
public void SByte()
{
int integerValue = -129;
sbyte sbyteValueFromInt = (sbyte) integerValue;
Assert.AreEqual(sbyteValueFromInt, 127); // True
byte byteValue = (byte) integerValue;
sbyte sbyteValueFromByte= (sbyte) byteValue;
Assert.AreEqual(sbyteValueFromByte, 127); // True
sbyte? nullableSbyte = sbyteValueFromByte;
Assert.AreEqual(nullableSbyte.Value, 127); // True
Assert.AreEqual((sbyte)nullableSbyte, 127); // True
Assert.AreEqual(nullableSbyte, 127); // Assert.AreEqual failed. Expected:<127 (System.SByte)>. Actual:<127 (System.Int32)>.
}
爲什麼最後斷言失敗了嗎?
如果我們深入探討MSTest
的AreEqual<object>
那麼它不應該認出127
轉換爲sbyte?
?
Assert.AreEqual<object>(expected, actual, message, parameters);
public static void AreEqual<T>(T expected, T actual, string message, params object[] parameters)
{
message = Assert.CreateCompleteMessage(message, parameters);
if (object.Equals((object) expected, (object) actual))
return;
Assert.HandleFailure ...
}
怎麼來的不知道怎麼投127
到sbyte
但它確實給sbyte?
?
@ SudhakarTillapudi'nullableSbyte.Value'是'sbyte '。 'nullableSbyte'是'sbyte?'。 –