Click here to Skip to main content
15,867,568 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 139.5K   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

Comments and Discussions

 
GeneralMy vote of 5 Pin
RAZblack15-Mar-15 12:43
RAZblack15-Mar-15 12:43 
GeneralMy vote of 5 Pin
Michael Haephrati19-Sep-12 6:08
professionalMichael Haephrati19-Sep-12 6:08 
GeneralIs it really necessary? Pin
lewax0010-Apr-12 8:12
lewax0010-Apr-12 8:12 
QuestionI prefer the alternative Pin
GParkings6-Mar-12 23:54
GParkings6-Mar-12 23:54 
AnswerRe: I prefer the alternative Pin
David-Lussy1-Nov-20 0:59
professionalDavid-Lussy1-Nov-20 0:59 
GeneralRe: It's true that it'll be slower as you're creating a delegate... Pin
Riz Thon23-May-11 20:22
Riz Thon23-May-11 20:22 
GeneralReason for my vote of 5 Good alternative. Pin
ProEnggSoft24-Feb-12 19:43
ProEnggSoft24-Feb-12 19:43 
GeneralReason for my vote of 5 Good summary. Sad that C# did not im... Pin
Roy from Detroit21-Feb-12 4:12
Roy from Detroit21-Feb-12 4:12 
GeneralReason for my vote of 3 performance impact for syntactic sug... Pin
johannesnestler15-Feb-12 4:09
johannesnestler15-Feb-12 4:09 
GeneralMuch less efficient than the VB version, as it introduces an... Pin
Ian Shlasko1-Jun-11 3:11
Ian Shlasko1-Jun-11 3:11 
GeneralGood and safe option for those who prefer such coding style.... Pin
All Time Programming30-May-11 20:52
All Time Programming30-May-11 20:52 
Good and safe option for those who prefer such coding style. I don't use "with" in vb nor will use this option, as I prefer using the actual variable itself, I feel that makes code more neat and readable. But really good option for whomsoever uses it. Alternates provided are also possible, but I don't like that style neither.
GeneralInteresting though I'd prefer to use the alternate (and have... Pin
R. Giskard Reventlov26-May-11 4:48
R. Giskard Reventlov26-May-11 4:48 
GeneralI gave it a 4 because it's a well-performed trick. I would n... Pin
dmjm-h25-May-11 6:26
dmjm-h25-May-11 6:26 
GeneralThanks mate, I've been looking for this for quite a while no... Pin
Steven O23-May-11 18:49
Steven O23-May-11 18:49 
GeneralOmar, I like it, it has my vote of 5. I also see there have... Pin
FDW17-May-11 23:44
FDW17-May-11 23:44 
GeneralRe: I am curious to know why the low votes as well. May be I nee... Pin
Omar Al Zabir18-May-11 0:38
Omar Al Zabir18-May-11 0:38 
GeneralRe: i could be wrong but i think vb.net's "with" is a compiler f... Pin
HaBiX19-May-11 23:06
HaBiX19-May-11 23:06 
QuestionThoughts Pin
PIEBALDconsult18-Jan-12 11:09
mvePIEBALDconsult18-Jan-12 11:09 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.