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

如何从数据库获取数据存入数组?C#代码实现遇阻求助

解决从API获取数据填充数组的问题

嘿,我看你现在卡在了把从API拿到的产品名称填充到names数组这一步,咱们一步步来搞定它:

先梳理下当前代码的核心问题

  1. GetData用了async void,这种写法除了事件处理函数外非常不推荐——它没法让你正确等待异步操作完成,大概率你会遇到“数据还没加载好就去用names”的情况。
  2. names是静态初始化的,没法直接用异步获取到的数据动态填充,得等API请求完成后再赋值。

解决方案分两步走

1. 改造GetData方法,让它能正确返回并填充数据

把async void改成async Task(方便后续等待执行),在拿到反序列化后的产品列表后,提取所有产品的name转换成数组赋值给names:

2. 正确调用异步方法

因为构造函数不能是异步的,所以得在合适的时机(比如页面加载完成、ViewModel初始化时)调用GetData并等待它执行完毕,确保数据加载好后再使用names。

修改后的完整代码示例

public class FeaturedItemList 
{ 
    public List<PagingProduct> products { get; set; } 
}

public class PagingProduct 
{ 
    public string name { get; set; } 
}

public class PagingProductRepository 
{ 
    public ObservableCollection<PagingProduct> pagingProducts { get; set; } 
    public FeaturedItemList products; 
    internal string[] names; // 先不初始化,等数据获取后赋值

    public PagingProductRepository() { } 

    // 把async void改成async Task,支持等待操作
    public async Task GetData() 
    { 
        using var httpClient = new HttpClient(); // 用using自动释放资源,避免内存泄漏
        var json = await httpClient.GetStringAsync("http://orangepotato.rjcpacking.com/index.php?route=api/login/getFeaturedProducts"); 
        products = JsonConvert.DeserializeObject<FeaturedItemList>(json);
        
        // 提取所有产品名称,转换成数组赋值给names
        if (products?.products != null)
        {
            names = products.products.Select(product => product.name).ToArray();
        }
        else
        {
            // 处理数据为空的边界情况,比如给个空数组默认值
            names = Array.Empty<string>();
        }
    }
}

怎么调用这个方法

比如在你的ViewModel或者页面初始化代码里:

var productRepo = new PagingProductRepository();
await productRepo.GetData(); // 必须等待数据加载完成
// 现在就可以正常使用productRepo.names了

关键细节说明

  • 用async Task替代async void:这能避免异步操作的“火并忘”问题,让你能精准控制数据加载时机。
  • 延迟数组赋值:等API请求和反序列化都完成后,用LINQ的Select提取名称,ToArray()转换成数组,完美替代原来的静态数据。
  • 空值检查:加上products?.products != null的判断,防止API返回空数据导致的空引用异常,让代码更健壮。

这样修改后,你就能动态把从API获取的产品名称填充到names数组里,彻底替换掉原来的静态测试数据啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:44:21