코드가 아름답다고 생각합니다.
유일한 개선점은 연장 방법에 코드를 삽입하는 것입니다.
편집 : 싶은 것은 확장 방법에 의해 요구되는 열거의 인스턴스 정의 및하지로 Enum
을 사용하는 것입니다 그것에 대해 생각
.
정말 멋지게 그것을 해결하는이
question을 발견
public class SelectList
{
// Normal SelectList properties/methods go here
public static Of<T>()
{
Type t = typeof(T);
if (t.IsEnum)
{
var values = from Enum e in Enum.GetValues(type)
select new { ID = e, Name = e.ToString() };
return new SelectList(values, "Id", "Name");
}
return null;
}
}
// called with
var list = SelectList.Of<Things>();
만 당신은 Dictionary<int, string>
아닌 SelectList
을 반환 할 수 있습니다,하지만 당신은 아이디어를 얻을.
EDIT2 : 우리는 당신이보고있는 경우를 커버하는 코드 예제와 함께 갈 여기
.
public class EnumList
{
public static IEnumerable<KeyValuePair<T, string>> Of<T>()
{
return Enum.GetValues(typeof (T))
.Cast<T>()
.Select(p => new KeyValuePair<T, string>(p, p.ToString()))
.ToList();
}
}
또는 키를 왜 사용하는 int
public class EnumList
{
public static IEnumerable<KeyValuePair<int, string>> Of<T>()
{
return Enum.GetValues(typeof (T))
.Cast<T>()
.Select(p => new KeyValuePair<int, string>(Convert.ToInt32(p), p.ToString()))
.ToList();
}
}
솔루션이 효과가 있다면 왜 더 간단한 솔루션을 찾고 있습니까? –
@ Ramhound : 직접적인 방법이 있을지도 모르지만. 나는 내 코드를 이해하지만 모든 사람이 그렇게 할 수있는 것은 아니다. 그래서 나는 더 간단한 것을 찾았다. – Homam
@ Homom 그런 식으로 의도했는지 모르겠지만 내 솔루션에 대한 코드를 모델링했을 때 combobox의 값을 올바르게 표시하기 위해 select 문에서 키와 값 유형을 바꿔야했습니다. 당신의 방법은 콤보 박스에 키를 표시하는 것을 끝내었다. – gonzobrains