Profile picture
Jared Parsons @jaredpar
, 7 tweets, 1 min read Read on Twitter
I think developers often lose sight of the fact that the C# type system is not the .NET type system. Instead the C# type system is merely a layer on top of the .NET type system providing both additional capabilities and additional restrictions.
Think most developers if asked would say C# is a super set of the .NET type system. Providing only new capabilities like lambdas, dynamic, pattern matching, etc ...
In reality though we also have restrictions that, while likely well meaning when initially implemented, are leaky abstractions that are pretty easy to poke through once you know the right levers to pull.
The .NET type system allows for several forms of array type punning: int[] <-> uint[] and byte[] <-> sbyte[]. C# though disallows such conversions. Unless you insert an object cast into the middle
uint[] -> int[] // C# error
uint[] -> object -> int[] // okay
The .NET type system represents bool as having one byte of storage and hence 256 values. C# though believes bool to have two values: true and false. Hence there are 254 forms of true that C# doesn't really think are true. This can be demonstrated with explicit layout tricks
The .NET type system also allows for a full range of operations on native sized int, what C# expresses as IntPtr. But C# uses only the operators defined on System.IntPtr which is an insufficient replacement.
Related point. When you're using Blazor you're actually dealing with three type systems: Web assembly, .NET and C#. I'm familiar enough with web assembly to know how to exploit the gaps but I'm confident there is a way :)
Missing some Tweet in this thread?
You can try to force a refresh.

Like this thread? Get email updates or save it to PDF!

Subscribe to Jared Parsons
Profile picture

Get real-time email alerts when new unrolls are available from this author!

This content may be removed anytime!

Twitter may remove this content at anytime, convert it as a PDF, save and print for later use!

Try unrolling a thread yourself!

how to unroll video

1) Follow Thread Reader App on Twitter so you can easily mention us!

2) Go to a Twitter thread (series of Tweets by the same owner) and mention us with a keyword "unroll" @threadreaderapp unroll

You can practice here first or read more on our help page!

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just three indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member and get exclusive features!

Premium member ($3.00/month or $30.00/year)

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!