Click here to Skip to main content
15,891,951 members

Conditional using block

Wendelius asked:

Open original thread
Hi,

I'd like to hear your opinions on conditional using blocks. The thing is that I need to have a structure like the following:
C#
public void AMethod(bool useClass2) {
   using (Class1 variable1  = new Class1()) {
      using (Class2 variable2 = new Class2(variable1) {
         using (Class3 variable3 = new Class3(variable2) {
            variable3.DoSomething();
         }
      }
   }
}

Now the problem is that based on the parameters of the method the middle using block should either be included or excluded. If the parameter useClass2 is true, the code should be executed as above but if the parameter is false, then the execution should look like the following:
C#
public void AMethod(bool useClass2) {
   using (Class1 variable1  = new Class1()) {
         using (Class3 variable3 = new Class3(variable1) {
            variable3.DoSomething();
         }
   }
}

So based on the parameter, the middle using block may be included and the innermost using block uses either Class1 or Class2.

Now, this could be done with for example:

  • Separate, specialized methods (no need for parameter)
  • using If..Else structure for the Class2, and duplicating the inner code on necessary parts etc.

But I'm curious, am I missing something obvious? Would there be an easy, clean way to conditionally use or bypass the instance of the Class2?

The classes (1-3) are .Net framework classes derived from File.IO.Stream, for example FileStream, CryptoStream etc.
Tags: C#

Plain Text
ASM
ASP
ASP.NET
BASIC
BAT
C#
C++
COBOL
CoffeeScript
CSS
Dart
dbase
F#
FORTRAN
HTML
Java
Javascript
Kotlin
Lua
MIDL
MSIL
ObjectiveC
Pascal
PERL
PHP
PowerShell
Python
Razor
Ruby
Scala
Shell
SLN
SQL
Swift
T4
Terminal
TypeScript
VB
VBScript
XML
YAML

Preview



When answering a question please:
  1. Read the question carefully.
  2. Understand that English isn't everyone's first language so be lenient of bad spelling and grammar.
  3. If a question is poorly phrased then either ask for clarification, ignore it, or edit the question and fix the problem. Insults are not welcome.
  4. Don't tell someone to read the manual. Chances are they have and don't get it. Provide an answer or move on to the next question.
Let's work to help developers, not make them feel stupid.
Please note that all posts will be submitted under the http://www.codeproject.com/info/cpol10.aspx.



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900