Browse by Tags
All Tags »
Patterns (RSS)
CLR 2.0 introduced IEquatable<T> which is an interface that allows for type safe equality comparisons. Previously, the best available method for comparing equality was the virtual Object Equals method. The method is loosely typed since
Read More...
Lately I’ve been playing quite a bit with F#. I have several hobby projects I’m working on that take up a bit of my time. But when I’m not playing around with F# I’m exploring ways to apply certain functional patterns to actual coding on the
Read More...
I think the best answer is: rarely. It's really hard to go straight to a justification here though. I find that answering a different question will eventually shed led on when to create a new exception. "What are the benefits of
Read More...
I know this is goes against conventional wisdom but it's something I believe in. Every sufficiently large project has that section of code nobody wants to go near. The mere mention of it causes people to leave the room. It usually has
Read More...
F# has a handy method called Unfold. Think of it as the logical opposite of an Aggregate function. Aggregates take a sequence of elements and convert them to a single element. An unfold method will take a single element and turn it into
Read More...
Sorry for the terrible pun in the title. I wanted to blog about developing an F# style Option class for C# and I couldn't resist. The basics of an Option class are very straight forward. It's a class that either has a value or doesn't.
Read More...
Version 2.0.0.2 released. Summary: RantPack is a utility library I maintain and actively use. The main themes of this library are functional programming, patterns, immutable/pressitent collections, future and other threading primitives. I've placed the
Read More...
"If you implement equality in a child class, including operators, you must implement the equality operators in the base class." Unfortunately this is another case of learn the hard way but makes sense when you think about it. The below code snippet is
Read More...
I like Enums and use them frequently for options and behavior. To an extent I use Enum's to control behavior. For example enum Kind { Kind1, Kind2, Kind3 } class Example { private Kind m_kind; public int SomeAction() { switch (m_kind1) { case
Read More...
Recently I've done a bit of posting about the difficulties of properly implementing equality in VB (and DotNet in general). While most of the problems can be fixed with a standard snippet the one really hard to implement issue is GetHashCode(). The rules
Read More...
I released a new version of RantPack today. Mostly this is a bug fix release with a couple of minor new features. https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=RantPack&ReleaseId=1119 Features Added a way to shim Immutable
Read More...
A recent check in of mine raised a few eye brows during reviews. I checked in a few macros which ended with/contained a "do{}while(0)" and people were curious as to why. In my experience there are two main uses for it. Insert an empty statement with no
Read More...
One action I find frustrating in C# is where a particular action needs to be taken based off of the type of a particular object. Ideally I would like to solve this with a switch statement but switch statements only support constant expressions in C# so
Read More...
This is a bit of a follow up to a previous post we discussed how to properly implement equality in VB. Several users commented/asked that IEquatable(Of T) could be used in place of overriding Equals(). Since IEquatable(Of T) doesn't define a GetHashCode()
Read More...
Many developers want to implement equality functions for their objects. DotNet made equality a deep part of the framework and added support all the way up to System.Object with Equals and GetHashCode . In addition to the strongly enforced
Read More...