Click here to Skip to main content
15,883,336 members
Articles / Programming Languages / C#
Tip/Trick

C# equivalent of VB's With keyword

Rate me:
Please Sign up or sign in to vote.
4.84/5 (49 votes)
27 May 2011CPOL 140.7K   23   18
VB has a With keyword that you can use to save typing same variables name over and over again. Here's a similar workaround for C#
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 workaround to this:
this.StatusProgressBar.Use(p =>
{
  p.IsIndeterminate = false;
  p.Visibility = Visibility.Visible;
  p.Minimum = 0;
  p.Maximum = 100;
  p.Value = percentage;
});

This 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 extension method that enables it:
public static void Use<T>(this 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.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Architect BT, UK (ex British Telecom)
United Kingdom United Kingdom
I am: Head of Engineering Consumer CRM & Billing, BT (ex British Telecom).
I got: 11 Microsoft MVP Awards, 4 CodeProject MVP awards.
I like: Performance and Scalability Challenges.
My Book: Building a Web 2.0 portal using ASP.NET 3.5. Also on Amazon
My Blog: http://omaralzabir.com
My Specialization: Web 2.0, SaaS, Performance and Scalability of Web Apps.
My Email: OmarALZabir at gmail dot com

Follow Me: twitter.com/omaralzabir

My Projects:
Droptiles: Open Source Web 2.0 AJAX Portal
SQL Server real-time monitor
Oracle real-time monitor
Codeuml - UML diagrams as fast as you can type
Fastest Streaming AJAX Proxy
CPU Alerter - Save power, work faster


My Articles: