Best practice to check if DataRow contains a certain column

c#, dataset

Solution

I really liked the approach taken by @Varun K. So, having that as a departing point I just wanted to put my two cents, in case it helps someone else. I simply improved it making it generic instead of just using object as a return type.

static class Extensions
{
  public static T Get<T>(this DataRow self, string column)
  {
    return self.Table.Columns.Contains(column)
      ? (T)self[column]
      : default(T);
    }
  }
}

Problem

At the moment, when I iterate over the DataRow instances, I do this. ``` foreach(DataRow row in table) return yield new Thingy { Name = row["hazaa"] }; ``` Sooner of later (i.e. sooner), I'll get the table to be missing the column donkey and the poo will hit the fan. After some extensive googling (about 30 seconds) I discovered the following protection syntax. ``` foreach(DataRow row in table) if(row.Table.Columns.Contains("donkey")) return yield new Thingy { Name = row["hazaa"] }; else return null; ``` Now - is this the simplest syntax?! Really? I was expecting a method that gets me the field if it exists or null otherwise. Or at least a Contains method directly on the row. Am I missing something? I'll be mapping in many fields that way so the code will look dreadfully unreadable...

Original source