Of course, you know the rule, don’t you. If you want to define your own value types in .NET, make sure they are immutable. Don’t create mutable value types!
Unfortunately, today, I forgot that rule. And I paid the price in a couple of hours needless debugging. Continue reading “Mutable Structs are Evil. Yes. Really.”
If you need to read binary files or binary streams, you need to know whether the file you’re reading is big-endian or little-endian.
It’s about the order that the bytes are stored in the file. For example the number 1, stored as a 32 bit integer, is 00000001, occupying 4 bytes. That means you need a sequence of four bytes in the file to store the number. If you put the byte that holds the most significant bits first, then the bytes look like this: Continue reading “Big-Endian vs Little-Endian: How Do You Remember Which is Which?”
In my last article I pointed out that Microsoft has given us no less than nine different general-purpose interfaces to perform the simple task of comparing objects to see if they are equal, or if one is greater than the other.
And I ended with a quick quiz. Could you identify those nine interfaces?
Continue reading “IEquatable and All That: The Nine Comparisons Interfaces”
My new Pluralsight course, C# Equality and Comparisons, has been published this week, bringing my total to 3 courses with the two existing courses. Math for Programmers and C# Collections Fundamentals.
C# Equality and Comparisons was largely spawned out of the earlier C# Collections course: Back in February this year, I was writing samples for that course to demonstrate making dictionaries case-insensitive. The easiest way to do that is to supply a case-insensitive equality comparer to the dictionary constructor, like this: Continue reading “C# Equality and Comparisons Published”
I’m sure most of us have been there. You have some small data type to declare, which only really contains a couple of primitives and is clearly most appropriate to exist as a struct. You put a couple of values in it, and because you’re doing this quickly and you want your code to be simple, you use auto properties. For this kind of struct there’s (hopefully) no reason not to.
And in the best traditions of those cookery programmes you see on tv, here’s one that I prepared earlier: Continue reading “AutoProperties, Structs and Constructors (C# Wishes Part 3)”
Well Christmas, that traditional time for giving has just gone past. However the TechieSimon blog has nothing to give, apart from strange blog posts. So I thought I’d be cheeky instead. To somewhat belatedly celebrate the time of giving I’m going to do some (metaphorical) asking: For the next few blog posts I’ll talk about some of the things that I’d love Microsoft to add to the C# Language.
My first wish is for a nullable dot operator. Continue reading “The Nullable Dot (Post-Xmas C# Wishes, Part 1)”
Last time I asked you what the output would be from this code….
double zero = 0;
double minus = -1.0e-400;
double big = 1.0 / zero;
double minusBig = 1.0 / minus;
Console.WriteLine(zero == minus);
Console.WriteLine(big == minusBig);
catch (Exception ex)
Continue reading “Zero Equals What???”
When I was at university our very forward thinking lecturer (Dr Bacon as I remember) introduced us to the most amazing up-to-date programming environment: C on UNIX. Storing an item in a collection meant declaring an array, or if you are really being adventurous, using malloc to dynamically allocate memory. That was it. Back then it was practically state of the art. As well as making for the kind of excellent training that you curse at the time but realize 10 years later you should be eternally thankful for having been made to do it.
What a difference from today when the .NET Framework comes with so many collection classes out of the box that Continue reading “The Two Types of Collection”
Last time we had a look at how Microsoft reinvented
the wheel the Visual Studio UI into a colourless ‘metro’ version. This time I’m going to look at some lessons we can learn from the story.
The first lesson is: Know the limits of a good idea. Continue reading “Visual Studio Monochrome – Part 2”
To a developer, bugs are things like, returning the wrong value, or a textbox being disabled where it should be enabled. Or when you’re given the honour of a 20 minute audience with the CEO to show him the brilliant new settings dialog you just spent 2 months writing and after 3 seconds it crashes. Continue reading “Visual Studio Monochrome – Part 1”