如何从List <t>填充数组?</t>

时间:2013-07-30 17:17:30

标签: c# asp.net api

我有一个控制器

namespace WebForms
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

public class ProductsController : ApiController
{

    Product[] products = new Product[] 
    { 
        new Product { Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1 }, 
        new Product { Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M }, 
        new Product { Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M } 
    };

    public IEnumerable<Product> GetAllProducts()
    {
        return products;
    }

    public Product GetProductById(int id)
    {
        var product = products.FirstOrDefault((p) => p.Id == id);
        if (product == null)
        {
            throw new HttpResponseException(HttpStatusCode.NotFound);
        }
        return product;
    }

    public IEnumerable<Product> GetProductsByCategory(string category)
    {
        return products.Where(
            (p) => string.Equals(p.Category, category,
                StringComparison.OrdinalIgnoreCase));
    }
}
}

我想从db。

填充数组产品

我有一个产品类。 在我的代码中使用扩展方法来填充列表

List<Product> myProducts = new List<Product>();
myProducts.FillData();

我需要把代码放到用列表填充数组吗?

2 个答案:

答案 0 :(得分:2)

您无法调整数组大小,因此无论如何您都需要创建一个新数组。

因此,在myProducts上使用Enumerable.ToArray()应该没问题:

  products = myProducts.ToArray();

答案 1 :(得分:0)

我同意其他评论和答案,只需致电.ToArray()并结束。但由于OP对自定义扩展方法感兴趣...

在上面创建一个新的命名空间,其中包含扩展方法的逻辑。

namespace CustomExtensions
{
    public static class ListExtension
    {
        public static void Fill(this List<object> thing) //Must be "this" followed by the type of object you want to extend
        {
            //Whatever
        }
    }
}

接下来,在您正在进行工作的名称空间中添加using CustomExtensions。现在当你写...

var myList = new List<object>();
myList.Fill()

编译器不应该抱怨。同样,这不是理想的解决方案,因为您要求的内容已经内置。