0

我有一个控制器

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));
    }
}
}

我想从数据库填充数组产品。

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

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

我需要在哪里放置该代码以用列表填充数组?

4

2 回答 2

2

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

所以在你的Enumerable.ToArray()上使用myProducts应该没问题:

  products = myProducts.ToArray();
于 2013-07-30T17:29:59.317 回答
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()

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

于 2013-07-30T17:42:05.167 回答