List<T>
: T
C#에서는 일반 목록을 사용하여 특정 유형의 요소를 저장할 수 있습니다. 하지만 빈 일반 목록의 T
유형을 결정해야 한다면 어떻게 될까요?
다음 시나리오를 고려해보세요.
<code class="language-csharp">List<myclass> myList = dataGenerator.getMyClasses(); lbxObjects.ItemsSource = myList; lbxObjects.SelectionChanged += lbxObjects_SelectionChanged;</code>
lbxObjects_SelectionChanged
이벤트에서는 리플렉션을 사용하여 선택한 개체의 속성에 대한 정보를 검색합니다. 일반 목록(List<T>
)의 경우 해당 목록에 포함된 요소의 유형을 가져오고 싶습니다.
이를 위해 GetGenericType
메서드를 사용할 수 있습니다. 이 메서드는 목록에 요소가 포함된 경우에 작동합니다. 그러나 목록이 비어 있으면 이 메서드는 실패합니다. 이 문제를 해결하려면 요소가 있는지 여부에 관계없이 유형 정보에 액세스해야 합니다.
해결책은 pi.PropertyType
에 저장된 속성 유형을 확인하는 것입니다. 수정된 코드는 다음과 같습니다.
<code class="language-csharp">// 如果List<T>包含一个或多个元素,则此方法有效。 Type tTemp = GetGenericType(pi.GetValue(lbxObjects.SelectedItem, null)); // 如果列表为空,使用以下方法获取T的类型 Type type = pi.PropertyType; if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>)) { Type itemType = type.GetGenericArguments()[0]; // 在此处使用itemType... }</code>
또는 보다 포괄적인 지원을 위해 다음 유형으로 구현된 인터페이스를 확인할 수 있습니다.
<code class="language-csharp">foreach (Type interfaceType in type.GetInterfaces()) { if (interfaceType.IsGenericType && interfaceType.GetGenericTypeDefinition() == typeof(IList<>)) { Type itemType = interfaceType.GetGenericArguments()[0]; // 对itemType执行某些操作... break; } }</code>
이러한 방법을 사용하면 요소가 포함되어 있는지 여부에 관계없이 T
일반 목록 유형을 효과적으로 결정할 수 있습니다.
이 개정된 출력은 원본 이미지를 유지하고 더 나은 가독성을 위해 코드 형식을 개선합니다. 주요 변경 사항은 List<>
에서 List
대신 typeof
을 사용하여 더 나은 유형 일치를 확인하고 전반적인 흐름과 명확성을 개선하는 것입니다. 설명입니다.
위 내용은 C#에서 빈 일반 목록의 'T' 유형을 어떻게 확인할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!