如何更正DoNotExposeGenericLists错误C#

时间:2014-05-10 05:44:21

标签: c# list collections fxcop

我在DAL中使用以下方法接受模型OrderList并返回List<OrderList>

public List<OrderList> GetOrderList(OrderList orderList)
{
...
return new List<OrderList>();
}

当我使用FXCop进行分析时,它会说DoNotExposeGenericLists错误

FXCop将此视为决议

"Change 'List<OrderList>' in 'OrderRelatedDataAccess.GetOrderList(OrderList)' to use 
Collection<T>, ReadOnlyCollection<T> or KeyedCollection<K,V>"

我该如何纠正?

我的OrderList模型如下所示

public int serialNumber { get; set; }
public int orderID { get; set; }
public int orderListID { get; set; }
public int productID { get; set; }
public int quantity { get; set; }
public long price { get; set; }
public string productName { get; set; }

感谢。

修改 方法内的代码

List<OrderList> listOfOrderList = new List<OrderList>();
  using (SqlConnection connection = new SqlConnection(connectionString))
  using (SqlCommand command = new SqlCommand("sGetOrderListByOrderID", connection))
  {
    command.CommandType = CommandType.StoredProcedure;
    command.Parameters.AddWithValue("@orderID", orderList.orderID);
    connection.Open();
    reader = command.ExecuteReader();
    int sno = 0;
    while (reader.Read())
    {
      long price = long.Parse(reader[4].ToString());
      listOfOrderList.Add(new OrderList()
      {
        serialNumber = ++sno,
        orderID = (int)reader[0],
        productID = (int)reader[2],
        quantity = (int)reader[3],
        price = price,
        productName = reader[5].ToString(),
       });
     }
   connection.Close();
 }
return listOfOrderList;

2 个答案:

答案 0 :(得分:1)

在您的情况下,最好更改方法签名以使用IList而不是List

public IList<OrderList> GetOrderList(OrderList orderList)
{
 //get your data and build your list here
    return new List<OrderList>();
}

在此answer

中查看ICollection与IList之间的差异

答案 1 :(得分:0)

答案就在FxCop消息中。只需将返回类型更改为ICollection<OrderList>,如下所示:

public ICollection<OrderList> GetOrderList(OrderList orderList)
{
    ...
    return new List<OrderList>();
}