Условное «использование» - PullRequest
0 голосов
/ 16 июня 2019

У меня есть следующий код, который выполняет некоторое преобразование из одного файла в поток памяти, который я затем записываю на диск. Все работает нормально, однако теперь я хочу всегда открывать file_1 для чтения, но либо открывать memory_stream или file_2 для записи в соответствии с предпочтениями пользователя.

Как получить условное утверждение, работающее в этой ситуации, если скобки будут конфликтовать.

Заранее спасибо за любую помощь.

public static void ProcessFile()
{
   try
   {         
      using (Open file_1 for reading)
      using (Open memory_stream for writing)
      {
         ...

Ответы [ 3 ]

1 голос
/ 16 июня 2019

Что-то в этом роде?

public static void ProcessFile()
{
    using (Open_file_1_for_reading)
    {
        if (condition)
        {
            using (Open_memory_stream_for_writing)
            {
                // ...
            }
        }
    }
}
0 голосов
/ 16 июня 2019

Я думаю, вы должны создать отдельные методы для выполнения этих двух вещей.У вас также должен быть метод, который обрабатывает запись.Все это не должно быть сделано ProcessFile.

private static void WriteToFile2() {
    using (FileStream s = ...) { WriteToStream(s); }
}

private static void WriteToMemory() {
    using (MemoryStream s = ...) { WriteToStream(s); }
}

private static void WriteToStrem(Stream s) {
    ...
}

public void ProcessFile() {
    using (FileStream s = ...) { // file 1
        ...
        if (...) {
            WriteToFile2();
        } else {
            WriteToMemory();
        }
    }
}
0 голосов
/ 16 июня 2019

Прежде всего using - это просто синтаксический сахар для try...finally, где в finally Dispose вызывается метод объекта IDisposable (используется в using), что-то вроде

try
{
  using(...){...}
}

не имеет большого смысла, так как это будет выглядеть как

try
{
  try{...}
  finally{dispose of an object}
}

Я думаю, что ваша проблема проста, просто сделайте:

if(user preference)
{
  using(writing){...}
}
else
{
  using(reading){...}
}
...