본문 바로가기
Utils

C#, Enum.GetMoveNext() 확장함수로 다음 값으로 넘기기

by Client. DJ 2021. 12. 21.
반응형

개인적으로 작업을 하다가 선언한 Enum값을 하나씩 넘겨야하는 작업이 생겼습니다. 그래서 반복문, 배열 처리가 아닌 단순히 함수 Enumerator.MoveNext()처럼 하나씩 넘기면 좋겠다는 생각에 아래와 코드를 만들었습니다.

 

/// <summary>
/// Enum 다음값 가져오기
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="source"></param>
/// <returns></returns>
public static T GetMoveNext<T>(this T source) where T : System.Enum
{
	var array = System.Enum.GetValues(typeof(T));
	for (int i = 0; i < array.Length - 1; i++)
	{
		if (source.Equals(array.GetValue(i)))
			return (T)array.GetValue(i + 1);
	}
	return (T)array.GetValue(0);
}

Enum.GetNext()를 호출하면 다음 Enum값을 가져옵니다. Enum Value가 마지막 인덱스인 경우 처음으로 다시 돌아갑니다. Enumerator.MoveNext()와는 다르게 다시 처음부터 진행하여 Value를 가져옵니다.

GetMoveNext() 예시

public enum Column
{
	Name,
	Age,
	Date,
}

private Column mColumn = Column.Name;

public Column NextColumn()
{
	return mColumn = mColumn.GetMoveNext();
}

위와 같이 다음 Enum 값을 다시 캐싱해주면서 호출할 때마다, 계속해서 다음 값으로 받아옵니다.

반응형

댓글