첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
본 블로그는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 블로그 콘텐츠 향상을 위해 쓰여집니다.

728x90
반응형
728x170

■ IEnumerable 인터페이스 사용하기 예제

Employee[] employeeArray = new Employee[3]
{
    new Employee("John", "Smith"  ),
    new Employee("Jim" , "Johnson"),
    new Employee("Sue" , "Rabon"  )
};

EmployeeEnumerable employeeEnumerable = new EmployeeEnumerable(employeeArray);

foreach(Employee employee in employeeEnumerable)
{
    Console.WriteLine(employee.FirstName + " " + employee.LastName);
}

 

■ IEnumerable 인터페이스 사용하기

 

▶ Employee.cs

/// <summary>
/// 직원
/// </summary>
public class Employee
{
    //////////////////////////////////////////////////////////////////////////////////////////////////// Property
    ////////////////////////////////////////////////////////////////////////////////////////// Public

    #region 이름 - FirstName

    /// <summary>
    /// 이름
    /// </summary>
    public string FirstName { get; set; }

    #endregion

    #region 성 - LastName

    /// <summary>
    /// 성
    /// </summary>
    public string LastName { get; set; }

    #endregion

    //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////// Public

    #region 생성자 - Employee(firstName, lastName)

    /// <summary>
    /// 생성자
    /// </summary>
    /// <param name="firstName">이름</param>
    /// <param name="lastName">성</param>
    public Employee(string firstName, string lastName)
    {
        FirstName = firstName;
        LastName  = lastName;
    }

    #endregion
}

 

▶ EmployeeEnumerator.cs

using System;
using System.Collections;

/// <summary>
/// 직원 열거자
/// </summary>
public class EmployeeEnumerator : IEnumerator
{
    //////////////////////////////////////////////////////////////////////////////////////////////////// Field
    ////////////////////////////////////////////////////////////////////////////////////////// Private

    #region Field

    /// <summary>
    /// 직원 배열
    /// </summary>
    private  Employee[] employeeArray;

    /// <summary>
    /// 현재 위치
    /// </summary>
    private int currentPosition = -1;

    #endregion

    //////////////////////////////////////////////////////////////////////////////////////////////////// Property
    ////////////////////////////////////////////////////////////////////////////////////////// Public

    #region 직원 배열 - EmployeeArray

    /// <summary>
    /// 직원 배열
    /// </summary>
    public Employee[] EmployeeArray
    {
        get
        {
            return this.employeeArray;
        }
        set
        {
            this.employeeArray = value;
        }
    }

    #endregion

    #region 현재 항목 - IEnumerator.Current

    /// <summary>
    /// 현재 항목
    /// </summary>
    object IEnumerator.Current
    {
        get
        {
            return Current;
        }
    }

    #endregion

    #region 현재 항목 - Current

    /// <summary>
    /// 현재 항목
    /// </summary>
    public Employee Current
    {
        get
        {
            try
            {
                return this.employeeArray[this.currentPosition];
            }
            catch(IndexOutOfRangeException)
            {
                throw new InvalidOperationException();
            }
        }
    }

    #endregion

    //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////// Public

    #region 생성자 - EmployeeEnumerator(employeeArray)

    /// <summary>
    /// 생성자
    /// </summary>
    /// <param name="employeeArray">직원 배열</param>
    public EmployeeEnumerator(Employee[] employeeArray)
    {
        this.employeeArray = employeeArray;
    }

    #endregion

    //////////////////////////////////////////////////////////////////////////////////////////////////// Method
    ////////////////////////////////////////////////////////////////////////////////////////// Public

    #region 다음 요소로 이동하기 - MoveNext()

    /// <summary>
    /// 다음 요소로 이동하기
    /// </summary>
    /// <returns>현재 위치가 마지막 요소 뒤 위치 여부</returns>
    public bool MoveNext()
    {
        this.currentPosition++;

        return (this.currentPosition < this.employeeArray.Length);
    }

    #endregion
        
    #region 위치 처음 요소 앞으로 이동하기 - Reset()

    /// <summary>
    /// 위치 처음 요소 앞으로 이동하기
    /// </summary>
    public void Reset()
    {
        this.currentPosition = -1;
    }

    #endregion
}

 

▶ EmployeeEnumerable.cs

using System;
using System.Collections;

/// <summary>
/// 직원 열거가능
/// </summary>
public class EmployeeEnumerable : IEnumerable
{
    //////////////////////////////////////////////////////////////////////////////////////////////////// Field
    ////////////////////////////////////////////////////////////////////////////////////////// Private

    #region Field

    /// <summary>
    /// 직원 배열
    /// </summary>
    private Employee[] employeeArray;

    #endregion

    //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////// Public

    #region 생성자 - EmployeeEnumerable(employeeArray)

    /// <summary>
    /// 생성자
    /// </summary>
    /// <param name="employeeArray">직원 배열</param>
    public EmployeeEnumerable(Employee[] employeeArray)
    {
        this.employeeArray = new Employee[employeeArray.Length];

        for(int i = 0; i < employeeArray.Length; i++)
        {
            this.employeeArray[i] = employeeArray[i];
        }
    }

    #endregion

    //////////////////////////////////////////////////////////////////////////////////////////////////// Method
    ////////////////////////////////////////////////////////////////////////////////////////// Public

    #region 열거자 구하기 - IEnumerable.GetEnumerator()

    /// <summary>
    /// 열거자 구하기
    /// </summary>
    /// <returns>열거자</returns>
    IEnumerator IEnumerable.GetEnumerator()
    {
        return (IEnumerator)GetEnumerator();
    }

    #endregion

    #region 열거자 구하기 - GetEnumerator()

    /// <summary>
    /// 열거자 구하기
    /// </summary>
    /// <returns>직원 열거자</returns>
    public EmployeeEnumerator GetEnumerator()
    {
        return new EmployeeEnumerator(this.employeeArray);
    }

    #endregion
}
728x90
반응형
그리드형
Posted by 사용자 icodebroker
TAG , ,

댓글을 달아 주세요