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

Xamarin ListView选中项时Dictionary与KeyValuePair空引用异常问题

解决Xamarin ListView选中项时的NullReferenceException问题

嘿,作为Xamarin和C#新手碰到这个空引用异常真的很常见,我来帮你捋清楚问题出在哪,以及怎么解决~

这个System.NullReferenceException基本上是因为args.Item为null导致的。在Xamarin的ItemTapped事件里有个小细节:当你再次点击已经选中的项时,系统会触发取消选中的操作,这时候args.Item就会变成null,你直接强制转换自然就报错了。

第一步:先加个null检查(最关键)

修改你的选中项事件代码,先判断args.Item是不是不为null,再进行转换操作:

public async void OnSelectedFriendDescript(object obj, ItemTappedEventArgs args)
{
    // 先把null的情况挡在外边
    if (args.Item == null)
        return;

    var selectedFriend = (KeyValuePair<string, string>)args.Item;
    // 现在就能安全获取Key和Value啦
    string friendId = selectedFriend.Key;
    string friendName = selectedFriend.Value;
    // 接下来就可以用这些值做你想做的事啦
}

额外小技巧:避免重复触发(可选)

如果你不想让用户重复点击同一个项时触发事件,可以在处理完逻辑后手动取消ListView的选中状态,这样下次点击同一个项就会正常触发,也不会出现null的情况:

public async void OnSelectedFriendDescript(object obj, ItemTappedEventArgs args)
{
    if (args.Item == null)
        return;

    var selectedFriend = (KeyValuePair<string, string>)args.Item;
    string friendId = selectedFriend.Key;
    string friendName = selectedFriend.Value;

    // 取消选中状态,防止重复点击触发null场景
    ((ListView)obj).SelectedItem = null;
}

最后再确认下数据源

另外你可以顺便确认下usermanager.GetUserList(keyword)返回的Dictionary<string, string>是不是真的有数据,如果返回空集合或者null的话,ListView空区域被点击也可能触发事件导致args.Item为null,不过前面加的null检查已经能覆盖这种情况啦。

这样修改之后,应该就能顺利获取选中项的Key和Value,再也不会报空引用异常啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:25:17