C# with keyword equivalent

Posted by oazabir on ASP.net Weblogs See other posts from ASP.net Weblogs or by oazabir
Published on Sun, 21 Mar 2010 20:11:52 GMT Indexed on 2010/03/21 20:21 UTC
Read the original article Hit count: 469

There’s no with keyword in C#, like Visual Basic. So you end up writing code like this:

this.StatusProgressBar.IsIndeterminate = false;
this.StatusProgressBar.Visibility = Visibility.Visible;
this.StatusProgressBar.Minimum = 0;
this.StatusProgressBar.Maximum = 100;
this.StatusProgressBar.Value = percentage;

Here’s a work around to this:

With.A<ProgressBar>(this.StatusProgressBar, (p) =>
{
    p.IsIndeterminate = false;
    p.Visibility = Visibility.Visible;
    p.Minimum = 0;
    p.Maximum = 100;
    p.Value = percentage;
});

Saves you repeatedly typing the same class instance or control name over and over again. It also makes code more readable since it clearly says that you are working with a progress bar control within the block. It you are setting properties of several controls one after another, it’s easier to read such code this way since you will have dedicated block for each control.

It’s a very simple one line function that does it:

public static class With
{
    public static void A<T>(T item, Action<T> work)
    {
        work(item);
    }
}

You could argue that you can just do this:

var p = this.StatusProgressBar;
p.IsIndeterminate = false;
p.Visibility = Visibility.Visible;
p.Minimum = 0;
p.Maximum = 100;
p.Value = percentage;

But it’s not elegant. You are introducing a variable “p” in the local scope of the whole function. This goes against naming conventions. Morever, you can’t limit the scope of “p” within a certain place in the function.

Shout it

© ASP.net Weblogs or respective owner

Related posts about .NET

Related posts about c#