获取列表的内部数组而不使用ToArray()

时间:2015-07-01 20:20:53

标签: c# data-structures

我有一个需要列表或数组的方法。我不想为它创建重载,因为它不是一个简单的方法。所以我决定这样做:

$('#example').dataTable({
  "infoCallback": function( settings, start, end, max, total, pre ) {
     return "Showing " + start + " to " + end + " of " + total + " entries"
            + ((total !== max) ? " (filtered from " + max + " total entries)" : "");
  }
});

我在客户端的 RoadNodes 有时在数组中,有时在列表中。因此,当客户端具有List时,我必须在列表上调用 ToArray()然后调用此方法,但这是不可接受的,因为它将项目复制到新数组。性能是一个大问题,所以我不想浪费任何时间。所以我该怎么做?

1 个答案:

答案 0 :(得分:1)

如果您只是对此进行枚举,则只需将其更改为单个签名即可:

public float BoundingBox(IEnumerable<RoadNode> nodes)

如果您需要列表和数组的索引行为,可以将签名更改为:

public float BoundingBox(IList<RoadNode> nodes)

第一个可能更合乎需要,因为您可以编写如下代码:

public float BoundingBox(IEnumerable<RoadNode> nodes){
    IList<RoadNode> list;
    if (nodes is IList<RoadNode>) list = (IList<RoadNode>)nodes;
    else list = nodes.ToList();
    //Do Something with list
}