2015-06-19 145 views
2

我有两个在主体中相同的函数,一个写入文件并且一个写入控制台。
有没有办法让文件/控制台通用到我传递给函数?创建将写入文件或写入控制台输出的通用方法

public void WatchWindow() 
{ 

    var max = _colLengths.Max(); 
    for (var rowIndex = 0; rowIndex < max; ++rowIndex) 
    { 
     for (var colIndex = 0; colIndex < WindowWidth; ++colIndex) 
     { 
      if (rowIndex < _colLengths[colIndex]) 
       Console.Write("{0} ", _actualWindow[colIndex]rowIndex].SymbolName); 
      else 
       Console.Write(" "); 
     } 
     Console.WriteLine(); 
    } 
    Console.WriteLine(); 
} 

public void PrintWindow(StreamWriter file) 
{ 

    var max = _colLengths.Max(); 
    for (var rowIndex = 0; rowIndex < max; ++rowIndex) 
    { 
     for (var colIndex = 0; colIndex < WindowWidth; ++colIndex) 
     { 
      if (rowIndex < _colLengths[colIndex]) 
       file.Write("{0} ", _actualWindow[colIndex][rowIndex].SymbolName); 
      else 
       file.Write(" "); 
     } 
     file.WriteLine(); 
    } 
    file.WriteLine(); 
} 

回答

3

A StreamWriterTextWriter。将Write*的静态方法Console写入Console.OutConsole.Out是一个TextWriter。所以常见的“东西”是写在TextWriter

public void WriteToFile(StreamWriter file) 
{ 
    PrintWindow(file); 
} 

public void WriteToConsole() 
{ 
    PrintWindow(Console.Out); 
} 

public void PrintWindow(TextWriter writer) 
{ 

    var max = _colLengths.Max(); 
    for (var rowIndex = 0; rowIndex < max; ++rowIndex) 
    { 
     for (var colIndex = 0; colIndex < WindowWidth; ++colIndex) 
     { 
      if (rowIndex < _colLengths[colIndex]) 
       writer.Write("{0} ", _actualWindow[colIndex][rowIndex].SymbolName); 
      else 
       writer.Write(" "); 
     } 
     writer.WriteLine(); 
    } 
    writer.WriteLine(); 
} 

您可以使用WriteToFile/WriteToConsole方法(或直接在PrintWindow方法,我会重命名为更容易,就像WriteToTextWriter

+0

这个伟大工程的感谢。 – user3281977