Firebase数据转字符串变量异常求助:列表ToString显示类型名称
问题原因与解决方法
为什么会显示System.Collections.Generic.List?
所有.NET集合类型(包括List<T>)的默认ToString()方法,只会返回类型的全称,不会自动遍历元素并拼接内容。你直接调用students.ToString(),本质是调用List的默认实现,自然拿不到实际的学生Id数据。
另外注意到你的GetAll()方法用了LimitToLast(1),说明你实际只需要最后一条学生数据,完全没必要返回List,这也是可以简化的点。
简便实现方案(推荐)
直接修改数据获取方法,返回单个StudentModel对象,避免集合处理的冗余:
public async Task<StudentModel> GetLastStudent() { var lastItem = (await firebaseClient.Child(nameof(StudentModel)) .OrderByKey() .LimitToLast(1) .OnceAsync<StudentModel>()) .FirstOrDefault(); if (lastItem == null) return null; return new StudentModel { Id = lastItem.Key // 如果需要其他属性,补充赋值: // Name = lastItem.Object.Name, // Age = lastItem.Object.Age }; }
调用代码简化为:
var lastStudent = await studentRepo.GetLastStudent(); if (lastStudent != null) { await DisplayAlert("a", lastStudent.Id, "a"); } else { await DisplayAlert("提示", "未找到学生数据", "确定"); }
保留List的处理方案(如果需要多条数据)
如果后续需要获取多条数据,保留GetAll()方法的话,需要手动遍历List拼接内容:
var students = await studentRepo.GetAll(); // 用逗号分隔所有学生Id,也可以换成其他分隔符 string idList = string.Join(", ", students.Select(s => s.Id)); await DisplayAlert("a", idList, "a");
补充:完善GetAll()的数据填充
当前你的GetAll()方法只给StudentModel的Id赋值,如果需要获取完整的学生数据,需要把item.Object里的其他属性同步过来:
.Select(item => new StudentModel { Id = item.Key, Name = item.Object.Name, Age = item.Object.Age // 其他属性同理 }).ToList();
内容的提问来源于stack exchange,提问作者RudyChemik
相关产品推荐
相关产品推荐

