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());
       }
   }