Matteo‘s company hired a Highly Paid Consultant. The HPC came in, took one look at their C# codebase, and said, “You’re doing everything wrong. But don’t worry, I can fix it!”

So he “fixed” it.

For example, what if you had a string, and needed to parse it to some concrete type. Why, you just do this:

public static T ToType<T>(this string value, T defaultValue)
{
        if (string.IsNullOrEmpty(value))
        {
                return defaultValue;
        }

        T result = defaultValue;

        try
        {
                result = (T) Convert.ChangeType(value, typeof (T));
        }
        catch
        {
        }

        return result;
}

This particular code doesn’t do very much at all- a basic null check followed by an attempt to convert, a swallowed exception and a default value output. There are built-in methods, like Int32.TryParse, but that wouldn’t work well with using generics. I don’t love it, but it’s not WTF.

public static T? ToNullable<T>(this string value) where T : struct
{
        if (string.IsNullOrEmpty(value))
        {
                return null;
        }

        T? result = null;

        try
        {
                result = (T) Convert.ChangeType(value, typeof (T));
        }
        catch
        {
        }

        return result;
}

It’s the same method, but this time where the default value is a nulled nullable. The real bonus here is that this time, they qualified the generic to require it to be a struct– which in C# terms actually requires it to be a “value type”. Which, as an aside, Convert.ChangeType requires its type parameter to be a value type- which means for consistency, they probably should have put that qualifier on ToType.

Again, this code, alone, isn’t really a full on WTF. So we need to put it into context: this is the Highly Paid Consultant’s home-grown JSON library, which handles both parsing and generating JSON.

Now, we’re getting the sense that someone’s been reinventing the wheel, awkwardly. So let’s look at one last method- ToJS. What do you think ToJS does? If you said, “clearly, this must be what converts an object to JSON”, you’d be wrong.

public static string ToJS(this string text)
{
        return text.Replace(@"", @"\")
                .Replace(@"'", @"'")
                .Replace(""", "\"");
}

This just escapes your strings for you.

There’s one last piece of context: all of the code this developer wrote, every method that could throw an exception had a handy, dandy, exception handler. That handler logged the exception and did nothing else.

Like a damp fart, the HPC hung around the office for awhile, and then slowly dissipated to another contract. The stench, however, is going to take Matteo some scrubbing to remove.

[Advertisement] ProGet’s got you covered with security and access controls on your NuGet feeds. Learn more.

Remy Porter

Source link

You May Also Like

Sometimes, you do have to feel bad for landlords (21 Photos)

Jacob Source link

Some french media ask for the final to be played again because 2 argentinian substitutes invaded the field during Messi's last goal. The ref send them to check where 7 of their substitutes were during Mbappe's goal…

Tags: football, france, argentina 520 points, 69 comments. Source link

John Told Us

Comments are an important part of making code comprehensible to other people,…

I can completely relate to this

Tags: Girlfriend 8583 points, 413 comments. Source link