これは.NETのバグかどうかわかりませんが、本当に面白いと思います。sbyte []は魔法のようにバイト[]にキャストできます
予想通り、私はこれを行うことはできません。sbytes
のタイプはobject
ある場合
sbyte[] sbytes = { 1, 2, 3 };
byte[] bytes = sbytes; // fails: cannot convert source type 'sbyte[]' to taget type 'byte[]'
しかし、これは動作します:1
object obj = new sbyte[]{ 1, 2, 3 };
byte[] bytes = obj as byte[];
Assert.IsNull(bytes, "WTF??")
備考:同じ問題がint[]
のために発生します - uint[]
と他のプリミティブ型も同様です。
備考2:コードはbyte[]
として配列を扱うが、デバッガは、フォーカスを失って、アレイ内の?
-sを示します。
備考3:これは配列のためではなく、根本的なタイプの自分自身のために働く:
object sbyteObj = (sbyte)1;
byte byteObj = (byte)sbyteObj; // System.InvalidCastException: Specified cast is not valid.
[OK]を、もちろん私はこのようなタイプを確認することができます。
if (obj.GetType() == typeof(byte[]))
を as
オペレータとダイレクトキャストの意図した動作ですか、これは.NET bですug?
これらの疑問符?私はこの行動を持っていません。最適化コードを無効にしてみてください。 –