2015-05-22 2 views
0

Мне нужна по умолчанию StreamReader без чтения каких-либо исключений.Lightweigth default StreamReader ничего не читает

Как я могу эффективно построить такой объект?

Edit В частности, если я прочитаю из StreamReader объекта с ReadLine Я хотел бы получить null и не исключение.

+0

Вы можете ellaborate больше на ваш вопрос? Я ответил на что-то, и я отбросил свой ответ, потому что чувствую, что отвечаю, кто знает, какую проблему: \ –

ответ

1

В идеале я бы предложил использовать TextReader как ваш уровень абстракции - редко нужно напрямую зависеть от StreamReader, так как возиться с базовым потоком, как правило, плохая идея.

Если у вас есть код, который принимает TextReader, вы могли бы использовать

Foo(new StringReader("")); 

Если вы действительно нужен StreamReader, вы могли бы просто передать в пустой MemoryStream:

Foo(new StreamReader(new MemoryStream())); 
+0

Я отбросил свой ответ, потому что я не уверен, о чем говорит OP. Хотя ваш ответ дает полезную информацию, вы уверены, что OP говорит об этом? OP говорит: «Я хочу StreamReader, который не бросает исключений», ммм ?? –

+0

@ MatíasFidemraizer: Чтение из эффективного пустого потока вызовет 'Read (char [], int, int)' для возврата 0 и 'Read()' для возврата -1, не выбрасывая исключения. Я * думаю * это то, что хочет OP ... –

+0

А ... Я вижу ... –

0

Вы можете установите положение в конец источника с использованием метода .Seek():

this.BaseStream.Seek(0, SeekOrigin.End); 

Если вы хотите, чтобы некоторые заглушки для вашего проекта вы можете наследовать его от StreamReader:

public class EmptyStreamReader : StreamReader 
{ 
    public EmptyStreamReader() 
    { 

    } 

    public EmptyStreamReader(Stream stream): base(stream) 
    { 

    } 

    public override int Read() 
    { 
     return 0; 
    } 

    public override int Peek() 
    { 
     return 0; 
    } 

    public override string ReadLine() 
    { 
     return string.Empty; 
    } 

    //and so on - just override all needed methods 
} 
Смежные вопросы