2014-02-18 3 views
0

Помогите понять суть передачи данных в другой класс. Итак, приложение Silverlight. У меня есть страница Home.xaml (и ее код позади Home.xaml.cs). Есть кнопка. когда я нажимаю на кнопку следующий код выполняется:Передача потока данных другим классам

Home.xaml.cs

 private void Button_Click_1(object sender, RoutedEventArgs e) 
     { 
     OpenFileDialog opendialog = new OpenFileDialog(); 
     opendialog.Multiselect = true; 
     bool? dialogResult = opendialog.ShowDialog(); 
     if (dialogResult.HasValue && dialogResult.Value) 
     { 

      Stream fileStream = opendialog.File.OpenRead(); 

      StreamReader reader = new StreamReader(fileStream); 
         ............ 

здесь мне нужно в таких данных, как читателя, потому что я хочу этот поток данных (читателя) для отправки некоторых совершенно других классов (например, один DataProccess.cs):

DataProccess.cs:

namespace SilverlightApplication1.Models 
{ 
public static class DataProcess 
{ 

    { 

    } 

} 

, который будет обрабатывать поток данных (читатель из Home.xaml.cs), используя регулярные выражения и выходные данные будут размещать в коллекции List <>.

как его реализовать. Я был бы рад за несколько строк кода от вас? :)

После доработки код:

Home.xaml.cs:

private void Button_Click(object sender, EventArgs e) 
    { 

     OpenFileDialog opendialog = new OpenFileDialog(); 
     opendialog.Multiselect = true; 
     bool? dialogResult = opendialog.ShowDialog(); 
     if (dialogResult.HasValue && dialogResult.Value) 
     { 
      Stream fileStream = opendialog.File.OpenRead(); 
      var processor = new Processor(); 
      ICollection<object> results = processor.Process(fileStream); 
     } 
    } 

Processor.cs

public class Processor 
{ 
    public ICollection<object> Process(Stream stream) 
    { 
     StreamReader reader = new StreamReader(stream); 
     string pattern = @"set vrouter ""([\w-]+)"""; 
     while (!reader.EndOfStream) 
     { 
      var matches = 
       Regex.Matches(reader.ReadToEnd(), pattern) 
        .Cast<Match>().Where(m => m.Success) 
        .Select(m => m.Groups[1].Value) 
        .Distinct(); 

      foreach (var match in matches) 
      { 
       var val = match + Environment.NewLine; 
       return new Collection<object>().Add(val);; //here error 

      } 

     } 


     //return new Collection<object>(val); 
    } 
} 

такая ошибка: Е rror1/Не могу неявно преобразовать тип «пустоты» в «System.Collections.Generic.ICollection»

+0

ошибка исходит из вашего .Add (val). Это недействительный метод. Вы должны использовать 'return new Collection {val};' –

ответ

1

Создайте новый класс, который будет обрабатывать ваши результаты

public class Processor 
{ 
    public ICollection<object> Process(Stream stream) 
    { 
     StreamReader reader = new StreamReader(stream); 
     // do stuff 

     return new Collection<object>(); 
    } 
} 

Затем создайте экземпляр этого и вызвать метод Process

Stream fileStream = opendialog.File.OpenRead(); 
var processor = new Processor(); 
ICollection<object> results = processor.Process(fileStream); 
+0

Shawn Kendrot, Hello! Я добавил исправленный код в соответствии с вашими инструкциями. Могли бы сообщить об ошибке? :) – user3214034

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