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

C# Xamarin数组转float问题:Entry实例化处代码崩溃求助

问题排查与解决

咱们先揪出崩溃的核心原因:你的查询返回的是分组后的Price对象数组,但Entry构造函数根本不接受数组类型的参数,而且后面的float.Parse(p)试图把数组直接转成浮点数,这完全是类型不匹配,不崩溃才怪😂

具体问题拆解

  1. singleNameWithOldestPrice这个查询里,你用了.ToArray(),所以foreach循环里的p是Price[](Price对象组成的数组),但new Entry(p)需要的是单个Price实例或者价格数值,类型对不上直接抛出异常。
  2. float.Parse(p)这里,你把整个数组丢给Parse方法,它根本不知道怎么把数组转成浮点数,这也是潜在的报错点。

修正方案

第一步:调整查询,直接取每个分组的最早价格实例

把查询里的.ToArray()改成.FirstOrDefault(),这样就能直接拿到每个分组中时间最早的那个Price对象,而不是整个数组:

var singleNameWithOldestPrice = from p in PriceList 
                                where p.NAME.Contains(SelectedProduct, StringComparison.OrdinalIgnoreCase) 
                                group p by p.NAME into grp 
                                select grp.OrderBy(a => a.TIMESTAMP).FirstOrDefault();

第二步:修正foreach循环的逻辑

现在循环变量是单个Price对象了,还要做一些健壮性处理(比如空值判断、安全解析价格):

foreach (var priceItem in singleNameWithOldestPrice) {
    // 跳过没有数据的分组,避免空引用异常
    if (priceItem == null) continue;

    // 假设你的Price类有一个存储价格的字段/属性,比如叫PriceValue,替换成你实际的字段名
    if (!float.TryParse(priceItem.PriceValue.ToString(), out float price)) {
        // 价格解析失败时,可以选择跳过或者记录日志
        continue;
    }

    // 根据Entry构造函数的要求传参:如果构造函数要数值就传price,要Price对象就传priceItem
    source.Add(new Entry(price) { 
        Label = "Name", 
        ValueLabel = price, 
        Color = SKColor.Parse("#f79c00") 
    });
}

额外说明

  • 如果你的Entry构造函数确实需要接收Price对象(而不是数值),那把new Entry(price)改成new Entry(priceItem)就行,但ValueLabel还是得用解析后的价格数值。
  • 用float.TryParse代替float.Parse是为了避免价格字符串格式错误导致的崩溃,让代码更健壮。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:05:34