2014-02-05 6 views
3

Итак, я некоторое время искал ответ на вопрос, и я вижу, чтобы добавить заголовочный файл using System.Linq, за исключением того, что у меня уже есть это, поэтому я не знаю, что мой код не компилирует. В моем контексте кода существует _accountreader, так почему он говорит, что определение его не существует?Не содержит определения того, где и не используется метод расширения?

Линия return _accountReader.Where(x => x.Age); где компилятор кричит на меня.

public interface IAccountReader 
{ 
    IEnumerable<Account> GetAccountFrom(string file); 
} 

public class XmlFileAccountReader : IAccountReader 
{ 
    public IEnumerable<Account> GetAccountFrom(string file) 
    { 
     var accounts = new List<Account>(); 
     //read accounts from XML file 
     return accounts; 
    } 
} 

public class AccountProcessor 
{ 
    private readonly IAccountReader _accountReader; 
    public AccountProcessor(IAccountReader accountReader) 
    { 
     _accountReader = accountReader; 
    } 
    public IEnumerable<Account> GetAccountFrom(string file) 
    { 
     return _accountReader.Where(x => x.Age); 
    } 
} 

public class Account 
{ 
    public int Age { get; set; } 
} 
+5

'IAccountReader' не реализует' IEnumerable '. –

+0

У меня уже есть это. Я сказал это в первом абзаце, объясняющем мою проблему. :( –

+1

Чтобы поместить комментарий Тима в повседневные термины, '_accountReader' является * одним читателем учетной записи.' Where' работает с * коллекциями * элементов, поэтому то, что вы там написали, не имеет смысла. – Jon

ответ

3

IAccountReader не реализует IEnumerable<Account>.

Поскольку вы предоставили метод GetAccountFrom вы также можете использовать это:

public IEnumerable<Account> GetAccountFrom(string file) 
{ 
    return _accountReader.GetAccountFrom(file).Where(x => x.Age); 
} 

Помимо что Where неверен, вам необходимо предоставить предикат, например:

.Where(x => x.Age <= 10); 
+0

Тим, вы гений. Большое вам спасибо! Я сделаю правильный ответ, как только StackOverflow позволит мне: D. И спасибо вам всем, кто пытался помочь. –

0

I предположим, что вы хотели бы реализовать это:

public class AccountProcessor 
{  
    // ... 

    public IEnumerable<int> GetAgesFrom(string file) 
    { 
     return _accountReader.GetAccountFrom(file).Where(x => x.Age); 
    } 
} 
2

Вы можете добавить пространство имен System.Linq. Поскольку там, где было разработано это пространство имен, оно должно быть добавлено.

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