#Google Analytic Tracker

Pages

Dec 12, 2008

C# Casting using Extension Method and VS2008 Debugger Issue

 

Since the creation of extension method in C# 3.0, my college and I have been happily writing extension methods which make our code look a lot nicer.

Then, I was surprised by my college when he took leverage of this by create an extension method for casting. Why not using the normal C# casting syntax?

   1:  public static TTargetType To<TTargetType>(this object oObject)
   2:  {
   3:      return (TTargetType)oObject;
   4:  }

Initially, I didn't like this idea too much, because it does have disadvantages when using a method to do casting:

The advantage of this method is that it makes typecasts way cleaner. The disadvantages are that you'll have to go one level down the stack trace to debug properly, and some erroneous casts might not get caught by the compiler.

However, after using the extension method for cast a couple of times, I really like use it. It does make the code a lot cleaner to read. In fact, whenever I notice my assignment is incorrect as I type, I can immediately hit the dot key to casting instead of moving my cursor back to the being of variable and type out the C# cast syntax:

   1:  private bool ApplyUnsplitWorkWorker(object[] oArgs)
   2:  {
   3:        sch_WorkData oUnsplitWork = oArgs[0].To<sch_WorkData>();
   4:        sch_WorkItemData[] aUnsplitWorkItems = oArgs[1].To<sch_WorkItemData[]>();
   5:        sch_WorkItemData oDeletedWorkItem = oArgs[2].To<sch_WorkItemData>();
   6:        sch_WorkData oDeletedWork = oArgs[3].To<sch_WorkData>();
   7:   
   8:  //...
   9:  }

Check out the bottom two examples , see which one you like more:

private string SomeMethod(DataRow oRow)
{
    //Extension cast
    return oRow.To<EmployeeRow>().Department.To<MathDepartment>().MathRoomCount.ToString();
}

private string SomeMethod2(DataRow oRow)
{
    //C# Cast
    return ((MathDepartment)((EmployeeRow)oRow).Department)).MathRoomCount.ToString();
}

In addition, there is as a extension method for casting that return a null if object is null or default value (such as DateTime), and an extension method for "as" syntax.

Yesterday, I encountered an exception when I was running a project. When I try to debug the issue, to my surprise one of the objects can't be analysis by the debugger, neither can it be display in the Watch Windows or the Immediate Windows. For testing, I create an extra variable call "l_oWorkItemRow2" using .C# casting, so that I can compare with "l_oWorkItemRow1"

Before:

 

Once I continue hit next line in the debugger, a null reference exception occurs:

What's going on? Why am seeing the variable properties saying "threw an exception of type 'System.NullReferenceException'"...

In fact, occasionally the debugger failed to analysis the property value in certain stack. If I move the debugger back to one stack where I pass the value, that I could than see the value.

The question is why the debugger was able to analysis the regular casting, and not the extension method cast. Is it just a current limitation to the debugger, or it is actually a bug? For example, do you know that only certain cases you can do "Edit and Continue" in the debugger.

Anyhow, if I find out more about this strange behaviour, I will definitely write another post!

Dec 9, 2008

Funny Articles

Man... it has been awhile since I put a new article. Originally I was going to talk about my experience on using Model-View-Presenter in a number of my project. Sadly I don't have the heart to write anything about it right now, mostly due to the amount of programming I have to do at work. I have rather focus on reading funny articles, like the followings:

http://www.murphys-laws.com/murphy/murphy-computer.html

http://en.wikipedia.org/wiki/Unusual_software_bug

http://www.workjoke.com/programmers-jokes.html

http://www.laughitout.com/2007/10/10-programming-quotations.html

26 Ways To Know Your Software Development Project Is Doomed
http://www.cio.com/article/print/470103

Anyways, that's all...

Jul 1, 2008

Interesting License

Typically, when you read a particular software license, it usually says you have a 30-day trial period and you are required to purchase the software afterward.  Recently, I read an article on the 10 Great Software Program You Can Get Gratis on TechNewsWord, and I was interested installing WordWeb 5.1.

Occasionally, I read the software license before I install it, or at least skim through it.

Here is the first paragraph of the license for WordWeb 5.1:

WordWeb free version may be used indefinitely only by people who take at most two commercial flights (not more than one return flight) in any 12 month period. People who fly more than this need to purchase the Pro version if they wish to continue to use it after a 30-day trial period.

The first time I read it, I asked myself did I click the correct hyperlink. After reading on the license, it turns out that the person who wrote this license concerns about the environment. He/she wants you be aware of how much greenhouse gas you produce each time you take the flight.  I don't know how many user will take this seriously, but at least it get the message out.