Investigating a bug, I discovered it was due to this weirdness in c#:

```
sbyte[] foo = new sbyte[10];
object bar = foo;
Console.WriteLine("{0} {1} {2} {3}",
        foo is sbyte[], foo is byte[], bar is sbyte[], bar is byte[]);

```

The output is "True False True True", while I would have expected "`bar is byte[]`" to return False. Apparently bar is both a `byte[]` and an `sbyte[]`? The same happens for other signed/unsigned types like `Int32[]` vs `UInt32[]`, but not for say `Int32[]` vs `Int64[]`.

Can anyone explain this behavior? This is in .NET 3.5.