問題は、キャストと明示的な演算子が原因であるということです。
(byte)objectExpression
と同じではありません(byte)sbyteExpression
。
1つ目は、[直接]キャストsbyte
です。これは、実際のオブジェクトタイプがであり、ではないために失敗しますbyte
。後者は、たまたま明示的な演算子を使用する変換(「明示的な変換」)を実行しますが、残念ながら、上記のように[直接]キャストのように見えます。sans-databaseが失敗した例を次に示します。
var obj = (object)(sbyte)0;
var i1 = (int)(sbyte)obj; // okay: object (cast)-> sbyte (conversion)-> int
var i2 = (int)obj; // fail: sbyte (cast)-> int (but sbyte is not int!)
(sbyte)objectExpression
実際のオブジェクトタイプに有効なキャストを使用するか、またはConvert.ToInt32(objectExpression)
を使用してそれをintに変換するobject
ための魔法を実行します。(を使用すると、オーバーフロー時に例外がスローされる可能性があります。)Convert.ToByte
ハッピーコーディング!