2013-07-25 4 views
-1

Я только начал изучать C#, и я пытаюсь создать консольное приложение, которое прочитает текстовый файл и покажет его в командной строке. Я также пытаюсь сделать метод, который читает текстовый файл в отдельной DLL, потому что я планирую позже расширить свою программу и попытаться создать своего рода текстовый движок. во всяком случае, вот мой код в моем DLL:Нужна помощь по методу

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 

namespace EngineFeatures 
{ 
    public class txtedit 
    { 

     public string Write_txt(string textin, out String output) 
     { 
      try 
      { 
       using (StreamReader sr = new StreamReader(textin)) 
       { 


        String line = sr.ReadToEnd(); 
        output = line; 
        return output; 
       } 

      } 
      catch (Exception e) 
      { 
       Console.WriteLine("The file could not be read:"); 
       Console.WriteLine(e.Message); 
      } 

     } 
    } 
} 

как я новичок, я буквально только начал 3 дня назад. во всяком случае, что я хочу сделать, можно вызвать функцию EngineFeatures.txtedit.Write_txt («TXT/test.txt»); в самом приложении и вернуть ему строку, но я все еще немного смущен, и я также получаю сообщение об ошибке «EngineFeatures.txtedit.Write_txt (string, out string)»: не все пути кода возвращают значение ». что я делаю неправильно?

+2

Сообщение об ошибке должно быть ясно; если в вашем блоке 'try' возникает исключение, оно ничего не вернет, поскольку у вас нет другого оператора return в другом месте. – pcnThird

+0

Ваше название вопроса на самом деле не объясняет, каков ваш вопрос. Вы должны дать более описательное название. – gunr2171

ответ

6

В случае исключения из вашего метода ничего не возвращается. Добавить значение по умолчанию некоторые вернуть или выбросить (другое) исключение вызывающего абонента:

catch (Exception e) 
{ 
    Console.WriteLine("The file could not be read:"); 
    Console.WriteLine(e.Message); 
    return null; 
    // or: return String.Empty 
    // or: throw new GameLoadException("Cannot read game file", e); 
} 
2

Есть несколько вещей в вашем коде, Сначала вы передаете переменную с out ключевое слово, а затем возвращая ту же переменную. Вы можете избавиться от out в списке параметров и просто вернуть output в Ьгу блоке, но и в случае исключения вы должны также возвращать некоторое значение, вероятно, null как:

EDIT: Вы можете избавиться от output параметр полностью и просто вернуть строку. (Спасибо @Jim)

public string Write_txt(string textin) 
{ 
    try 
    { 
     using (StreamReader sr = new StreamReader(textin)) 
     { 
      String line = sr.ReadToEnd(); 
      return line; 
     } 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine("The file could not be read:"); 
     Console.WriteLine(e.Message); 
     return null; 
    } 
} 
+0

Хороший ответ, но в вашем примере вы можете пойти еще дальше и просто избавиться от второго параметра «output» и просто вернуть sr.ReadToEnd(); – Jim

+0

@jim, да, но я действительно хотел сообщить, что что-то должно быть возвращено из блока try и catch. Но ты прав, я собираюсь изменить его. – Habib

+0

Вместо того, чтобы возвращаться из блоков try и catch, я часто объявляю, что объект должен быть возвращен вне блока try и возвращает его после окончания catch. Поэтому у меня будет строка output = string.Empty; как раз перед попыткой. Тогда я бы установил output = sr.ReadToEnd(); изнутри try, а затем сразу после catch я возвращаю вывод; Внутри улова вы можете либо установить вывод в значение null, либо установить его в string.empty, либо создать новое исключение. Возвращение извне try/catch, но это означает, что вам нужен только один оператор return, и вам не нужен отдельный для каждого catch. – Jim

0
public class txtedit 
{ 

    public string Write_txt(string textin, out String output) 
    { 
     output = ""; 

     try 
     { 
      using (StreamReader sr = new StreamReader(textin)) 
      { 


       String line = sr.ReadToEnd(); 
       output = line; 
       return output; 
      } 


     } 
     catch (Exception e) 
     { 
      Console.WriteLine("The file could not be read:"); 
      Console.WriteLine(e.Message); 
     } 
     return output; 

    } 
Смежные вопросы