You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

反射访问List<TabViewItem>索引属性报错,如何获取首个项的HeaderText?

解决List获取第一个Tab的HeaderText问题

错误原因

你用GetType().GetProperty("[0]")获取索引器的方式是错误的,List<T>的索引器对应的属性名称是Item,而非[0],所以这个调用会返回null,后续调用GetValue自然会抛出空引用异常。

推荐解决方案:直接强转(无需反射)

既然已经明确tabs是System.Collections.Generic.List<DevExpress.Maui.Controls.TabViewItem>类型,直接强转后用普通索引访问即可,这种方式比反射更高效且不易出错:

private void HeaderWasTapped(object sender, ItemHeaderTappedEventArgs e)
{
    var PanelMap = new Controls.FlexMap();
    var items = sender.GetType().GetProperty("Items").GetValue(sender);

    // 读取私有成员
    var tabs = items.GetType()
        .GetField("tabItems", BindingFlags.Instance | BindingFlags.NonPublic)
        .GetValue(items);

    // 强转为List<TabViewItem>,直接访问索引0
    var tabList = tabs as List<DevExpress.Maui.Controls.TabViewItem>;
    if (tabList != null && tabList.Count > 0)
    {
        var firstTabHeader = tabList[0].HeaderText;
        // 这里编写你的条件判断逻辑
    }
}

反射方式(仅当必须使用反射时)

如果因特殊需求必须用反射访问索引器,要通过名称为Item的属性,并传入索引参数:

private void HeaderWasTapped(object sender, ItemHeaderTappedEventArgs e)
{
    var PanelMap = new Controls.FlexMap();
    var items = sender.GetType().GetProperty("Items").GetValue(sender);

    var tabs = items.GetType()
        .GetField("tabItems", BindingFlags.Instance | BindingFlags.NonPublic)
        .GetValue(items);

    // 获取List的索引器属性(名称为Item),传入索引0作为参数
    var itemProperty = tabs.GetType().GetProperty("Item");
    if (itemProperty != null)
    {
        var firstTab = itemProperty.GetValue(tabs, new object[] { 0 });
        if (firstTab != null)
        {
            var headerTextProperty = firstTab.GetType().GetProperty("HeaderText");
            if (headerTextProperty != null)
            {
                var headerText = headerTextProperty.GetValue(firstTab) as string;
                // 这里编写你的条件判断逻辑
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者abc123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 20:55:07