C\#매 거 진 목록 구현
#region
/// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="value"></param>
/// <returns></returns>
public static List<T> GetEnumList<T>(this T value)
{
var list = new List<T>();
if (value is Enum)
{
var valData =Convert.ToInt32((T)Enum.Parse(typeof(T), value.ToString())) ;
var tps =Enum.GetValues(typeof (T));
list.AddRange(from object tp in tps where ((int)Convert.ToInt32((T)Enum.Parse(typeof(T), tp.ToString())) & valData) == valData select (T) tp);
}
return list;
}
/* :https://www.codenong.com/17123548/ */
/// <summary>
/// ;
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="value"></param>
/// <returns></returns>
public static List<T> GetEnumList<T>() where T : Enum
{
List<T> list = Enum.GetValues(typeof(T)).OfType<T>().ToList();
return list;
}
/* :https://www.codenong.com/105372/ */
/// <summary>
/// Gets all items for an enum value.( )
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="value">The value.</param>
/// <returns></returns>
public static IEnumerable<T> GetAllItems<T>(this Enum value)
{
foreach (object item in Enum.GetValues(typeof(T)))
{
yield return (T)item;
}
}
/// <summary>
/// Gets all items for an enum type.( )
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static IEnumerable<T> GetAllItems<T>() where T : struct
{
foreach (object item in Enum.GetValues(typeof(T)))
{
yield return (T)item;
}
}
#endregion
반환 값 유형 에 따라 1 과 2 는 1 조로,3 과 4 는 1 조로 할 수 있다.방법의 성질 에 따라 1 과 3 을 한 조로,2 와 4 를 한 조로 할 수도 있다.1,2 다 돌아 와 요. List,3,4 는 모두 매 거 진 집합 으로 되 돌아 갑 니 다. IEnumerable,이것 도 옮 겨 다 니 거나 List 로 전환 하기에 편리 합 니 다.
1 과 3 은 모두 확장 방법 으로 매 거 진 대상 을 통 해 해당 하 는 매 거 진 유형의 모든 매 거 진 을 편리 하 게 얻 을 수 있 습 니 다.다만 업무 적 으로 볼 때 이러한 호출 의 도 는 명확 하지 않 습 니 다.2 와 4 는 모두 일반적인 정적 방법 으로 정적 클래스 호출 을 통 해 비교적 간결 하고 의도 가 명확 하 다.
아래,우 리 는 각각 모든 방법 에서 오른쪽 단 추 를 누 릅 니 다-유닛 테스트 를 만 듭 니 다:
최종 단원 테스트 코드 는 다음 과 같다.
[TestClass()]
public class EnumExtensionTests
{
/// <summary>
///
/// </summary>
enum ELanguage
{
CSharp = 0,
Java = 1,
VB = 2
}
/// <summary>
///
/// </summary>
private ELanguage _eLanguage = ELanguage.CSharp;
[TestMethod()]
public void GetEnumListTest1()
{
List<ELanguage> list = _eLanguage.GetEnumList(); // ;
Assert.IsTrue(list.Count > 0);
}
[TestMethod()]
public void GetEnumListTest()
{
List<ELanguage> list = EnumExtension.GetEnumList<ELanguage>(); // ;
Assert.IsTrue(list.Count > 0);
}
[TestMethod()]
public void GetAllItemsTest()
{
var allItems = _eLanguage.GetAllItems<ELanguage>(); // ;
List<ELanguage> list = allItems.ToList();
Assert.IsTrue(list.Count > 0);
}
[TestMethod()]
public void GetAllItemsTest1()
{
var allItems = EnumExtension.GetAllItems<ELanguage>(); // ;
List <ELanguage> list = allItems.ToList();
Assert.IsTrue(list.Count > 0);
}
}
테스트 결 과 는 모두 통과 되 었 다.마지막 으로 코드 주 소 를 드 립 니 다https://gitee.com/dlgcy/dotnetcodes/tree/dlgcy/DotNet.Utilities/ 매 거
전재 하 다
이상 은 C\#매 거 진 목록 을 실현 하 는 상세 한 내용 입 니 다.c\#매 거 진 목록 에 관 한 자 료 는 다른 관련 글 을 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#Task를 사용하여 비동기식 작업을 수행하는 방법라인이 완성된 후에 이 라인을 다시 시작할 수 없습니다.반대로 조인(Join)만 결합할 수 있습니다 (프로세스가 현재 라인을 막습니다). 임무는 조합할 수 있는 것이다. 연장을 사용하여 그것들을 한데 연결시키는 것이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.