цикл foreach - PullRequest
       2

цикл foreach

1 голос
/ 17 марта 2010

У меня два вопроса

1) мой интерфейс У меня есть интерфейс под названием IRegister и внутри него у меня есть другой интерфейс под названием IPerson, это правильная практика?

2) у меня есть два списка (IRegister, IPerson), оба могут иметь одну или несколько строк.

каков наилучший способ зациклить оба списка? в GetValidationRules?

public interface IRegister 
{
    string FirstName { get; }
    string MiddleName { get; }
    string LastName { get; }
    string EmailAddress { get; }        
    List<IPerson> Student { get; }
}


public static List<ValidationRule> GetValidationRules(List<IRegister> register)
    {
        List<ValidationRule> validationRules = new List<ValidationRule>();  



        foreach (IRegister myregister in register)
        {
            if (string.IsNullOrEmpty(myregister.FirstName))
                validationRules.Add(new ValidationRule("Reg", "Must have aFirst Name"));
            if (string.IsNullOrEmpty(myregister.LastName))
                validationRules.Add(new ValidationRule("Reg", "Must have a Last Name"));
            if (string.IsNullOrEmpty(myregister.EmailAddress))
                validationRules.Add(new ValidationRule("Reg", "Must have a Email Address"));

  IPerson here? how
        }

Ответы [ 3 ]

2 голосов
/ 17 марта 2010

Гм, вложенный цикл у вашего маркера.

foreach (IPerson peep in myregister.Student) { ... }

1 голос
/ 17 марта 2010

Хотя я не уверен на 100%, что вы пытаетесь выполнить, основываясь на вашем вопросе ... Я предполагаю, что вам интересно, как перебрать свойство Student IRegister внутри цикла ...

public interface IRegister 
{
    string FirstName { get; }
    string MiddleName { get; }
    string LastName { get; }
    string EmailAddress { get; }        
    List<IPerson> Student { get; }
}

public static List<ValidationRule> GetValidationRules(List<IRegister> register)
{
    List<ValidationRule> validationRules = new List<ValidationRule>();  



    foreach (IRegister myregister in register)
    {
        if (string.IsNullOrEmpty(myregister.FirstName))
            validationRules.Add(new ValidationRule("Reg", "Must have aFirst Name"));
        if (string.IsNullOrEmpty(myregister.LastName))
            validationRules.Add(new ValidationRule("Reg", "Must have a Last Name"));
        if (string.IsNullOrEmpty(myregister.EmailAddress))
            validationRules.Add(new ValidationRule("Reg", "Must have a Email Address"));

        foreach (IPerson person in myregister.Student) 
        {
            // Not sure what properties you want to check for because 
            // you didn't show us what the IStudent interface looks like
            // so I will just assume that the IStudent object has a  
            // property for EmailAddress as well

            if (string.IsNullOrEmpty(person.EmailAddress))
                validationRules.Add(new ValidationRule("Reg", "Student must have a Email Address"));
        }
    }
}
1 голос
/ 17 марта 2010

Самый простой способ перебрать все экземпляры IPerson - это использовать SelectMany, чтобы сгладить список IPerson в экземплярах IRegister. Например

foreach ( var person in register.SelectMany(x => x.Student))  {
  ...
}

В результате создается IEnumerable<IPerson>, который содержит все IPerson экземпляров из всех значений IRegister.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...