2014 was a great year for us and hopefully for you too! Happy 2015 everybody! Enjoy this popular WTF from all the way back in May.
Sometimes, a developer just needs to take the long way around. Sure, a line of code like DateTime StartTime = DateTime.Now
looks simple and readable, but what happens if you want the StartTime variable to be not exactly now?
Craig’s co-worker figured out a better solution:
public string SomeFunc() {
DateTime StartTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day,
DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second, DateTime.Now.Millisecond);
//… do stuff
}
So much better.
Now, though, we have a string that’s guaranteed to exist and be at least 6 characters long. We need to get the last six characters of that string. We could use a substring function, but that wouldn’t give us an opportunity to use our knowledge of LINQ functions. Kelly found this superior solution:
public string LastSixDigits
{
get
{
if (string.IsNullOrWhiteSpace(this.Number) || this.Number.Length < 6)
return string.Empty;
return this.Number.Reverse().Take(6).Reverse().Aggregate(string.Empty, (s, c) => s += c);
}
}
Finally, one of Jonathan’s peers needed to store a pair of strings as a single object. They could have used one of the many built-in types for that task, like a Tuple or KeyValuePair, but would that have provided a suite of overridden operators?
public struct StringString
{
public string Key;
public string Value;
public static bool operator ==(StringString dataItem1, StringString dataItem2)
{
return (dataItem1.Key == dataItem2.Key && dataItem1.Value == dataItem2.Value);
}
public static bool operator !=(StringString dataItem1, StringString dataItem2)
{
return (dataItem1.Key != dataItem2.Key || dataItem1.Value != dataItem2.Value);
}
public override bool Equals(object obj)
{
if (!(obj is StringString))
{
return false;
}
return (this == (StringString)obj);
}
public override int GetHashCode()
{
return (Key.GetHashCode() + Value.GetHashCode());
}
}