枚举时数组对象为空,但通过索引访问时不为空

时间:2014-09-24 16:02:29

标签: c# async-await

当我通过HttpClient对象从web api获取数据时,我有异步方法。 我打印出响应字符串,我可以看到我有正确的数据。

我还将响应转换为我的自定义类的数组,它的工作正常(我可以将属性记录到控制台)。

当我通过索引打印属性时,一切正常:

Debug.WriteLine("B: " + brands[0].Brand);

但是当我枚举数组时它没有记录数据,看起来它包含空字符串,为什么?:

foreach (Brand brand in brands)
{
    Debug.WriteLine("BRAND: ", brand.Brand.ToString()); // Prints just BRAND:
}

这就是我的方法的样子:

 public static async Task<Brand[]> LoadBrandsAsync()
    {
        Brand[] brands = null;

        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri(serviceUrl);
            HttpResponseMessage response = await client.GetAsync("Brands");
            try
            {
                brands = await response.Content.ReadAsAsync<Brand[]>();
                Debug.WriteLine("Count: " + brands.Count());
                Debug.WriteLine("B: " + brands[0].Brand); // This works fine 
                Debug.WriteLine("B: " + brands[0].Sales); // it print out the data

                foreach (Brand brand in brands)
                {
                    // This does't work, WHY?
                    Debug.WriteLine("BRAND: ", brand.Brand.ToString() + ", " + brand. Sales.ToString());
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.ToString());
            }
        }
        return brands;
    }

有人可以回答为什么在枚举时数组中的对象看起来像空吗?

1 个答案:

答案 0 :(得分:6)

所有Debug.WriteLine的第一个参数是格式字符串,其元素位置为hoders:"BRAND: {0}, {1}...",在您的情况下没有{0},因此忽略其他参数。

查看Debug.WriteLine帮助。您也不需要.Tostring()次调用 - 如果参数不是字符串而不是null,则自动执行:

  Debug.WriteLine("BRAND: {0}, {1}", brand.Brand, brand.Sales);