반응형
개인적으로 작업을 하다가 선언한 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를 가져옵니다.
public enum Column
{
Name,
Age,
Date,
}
private Column mColumn = Column.Name;
public Column NextColumn()
{
return mColumn = mColumn.GetMoveNext();
}
위와 같이 다음 Enum 값을 다시 캐싱해주면서 호출할 때마다, 계속해서 다음 값으로 받아옵니다.
반응형
'Utils' 카테고리의 다른 글
C#, 커스텀 밴치마크 라이브러리 (함수 테스트 도구) (2) | 2022.01.16 |
---|---|
유니티, 코루틴 최적화(Coroutine Yield Instruction) (0) | 2021.12.23 |
C#, Description 통한 Enum 관리하기 (0) | 2021.12.19 |
C#, 확장함수를 이용하여 Collection<T> First, Last 가져오기 (0) | 2021.12.19 |
유니티, 런타임 중 특정 오브젝트 모두 찾기 (0) | 2021.12.19 |
댓글