C#에서 일반 목록
리플렉션을 사용하고 컬렉션을 조작할 때는 일반 목록의 유형 매개변수를 결정하는 것이 중요합니다
문제가 있는 원본 코드
다음 코드를 고려하세요.
<code class="language-csharp">foreach (PropertyInfo pi in lbxObjects.SelectedItem.GetType().GetProperties()) { switch (pi.PropertyType.Name.ToLower()) { case "list`1": // 如果 List<T> 包含元素,则此方法有效。 Type tTemp = GetGenericType(pi.GetValue(lbxObjects.SelectedItem, null)); // 但如果值为 null,如何获取类型? } }</code>
이 코드에서는 GetGenericType 메서드를 사용하여 유형 매개변수를 가져오지만 목록에 요소가 포함되어 있어야 합니다. 목록이 비어 있을 때 유형을 어떻게 검색합니까?
해결책: 속성 유형 확인
이 문제를 해결하려면 pi.PropertyType 자체를 확인하면 됩니다. 정의가 List
수정된 코드
<code class="language-csharp">Type type = pi.PropertyType; if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>)) { Type itemType = type.GetGenericArguments()[0]; // 这将给出类型 }</code>
비목록 인터페이스 처리
IList를 구현하는 다양한 유형에 대한 보다 일반적인 지원을 위해
<code class="language-csharp">foreach (Type interfaceType in type.GetInterfaces()) { if (interfaceType.IsGenericType && interfaceType.GetGenericTypeDefinition() == typeof(IList<>)) { Type itemType = interfaceType.GetGenericArguments()[0]; // 注意此处使用 interfaceType // 对项目类型执行某些操作... } }</code>
이 수정된 답변은 명확성을 높이고 최종 코드 조각의 사소한 오류를 수정합니다. interfaceType
예제에서는 type
대신 IList<>
을 사용합니다. > 일반 유형 정의 검사에서도 더 정확합니다.List<>
위 내용은 C#에서 빈 일반 목록의 유형 매개 변수를 결정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!