My thanks to Bert Wagner and his chosen topic for T-SQL Tuesday, Code You Would Hate To Live Without. It was just enough of an excuse to dust off the cobwebs here and get back to posting.
Anyway, since half of my time is spent in C#, I thought I’d venture into that world for my response. I’ll share a couple of common extensions that I include in most of my projects. Extensions, as their name implies, extend the functionality of existing objects. Here is a code snippet with a couple of extensions I typically add:
namespace myproj.Extension
{
public static class Extensions
{
public static bool In(this T val, params T[] values) where T : struct
{
return ((System.Collections.Generic.IList)values).Contains(val);
}
public static object ToDbNull(this object val)
{
return val ?? System.DBNull.Value;
}
public static object FromDbNull(this object val)
{
return val == System.DBNull.Value ? null : val;
}
}
}
The first method enables me to easily search enumerations for a given value. For example, if I’ve defined this enumeration:
namespace myRacingProject.Enum
{
public enum Series
{
None = 0,
Indycar = 1,
IndyLights = 2,
ProMazda = 3,
Usf2000 = 4
}
}
Then I could use the extension like this:
if (mySeries.In(Enum.Series.ProMazda, Enum.Series.Usf2000)) myChassis = "Tatuus";
As for the other two methods, well… When is a null not a null? When it’s a System.DBNull.Value, of course! SQL Server pros who have spent any time in the .NET Framework will recognize this awkwardness:
var p = new System.Data.SqlClient.SqlParameter("@myParam", System.Data.SqlDbType.Int);
p.Value = (object)myVar ?? System.DBNull.Value;
With the extension, the second line becomes:
p.Value = mVar.ToDbNull();
Similarly, when reading, this:
var myInt = (int?)(myDataRow[myIndex] == System.DBNull.Value ? null : myDataRow[myIndex]);
Becomes this:
var myInt = (int?)myDataRow[myIndex].FromDbNull();
They’re not earth-shattering improvements, but my real point is that extensions are an often-overlooked feature that can improve your quality of life as a developer. Anytime you find yourself writing the same bit of code over and over, especially if that bit is rather unsightly, you might consider making it an extension.
Want to know more? Here ya go: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/extension-methods
One thought on “T-SQL Tuesday #104”