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
類型,無論它們是否包含任何元素。
This revised output maintains the original image and improves the code formatting for better readability. The key changes are using List<>
instead of List
in the typeof
check for bving the explanation.
以上是如何確定 C# 中空泛型清單的類型「T」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!