数组转列表--无法使AddRange(IEnumerable)方法工作

3

很抱歉这个问题比较幼稚。我有以下内容:

public Array Values
{
  get;
  set;
}

public List<object> CategoriesToList()
{
  List<object> vals = new List<object>();
  vals.AddRange(this.Values);

    return vals;
}

但是这样不行,因为我无法输入数组。有没有什么简单的方法来修复上面的代码,或者一般地将System.Collections.Array转换为System.Collections.Generic.List?
4个回答

6
请确保您正在使用System.Linq;,然后将您的代码改为:vals.AddRange(this.Values.Cast<object>()); 编辑:您还可以遍历数组并逐个添加每个项目。
再次编辑:另一个选项是简单地将您的数组强制转换为object[],然后使用ToList()函数或将其传递到List<object>构造函数中: ((object[])this.Values).ToList(); 或者 new List<object>((object[])this.Values)

我并不是真的想用Linq来做这个,但还是谢谢你。这很漂亮。你值得赞扬 :) - Dervin Thunk

2
你能把你的属性声明改成这个吗?:
public object[] Values { get; set; }

嗨。不,我不能。我正在从旧的Word 2003 API中获取数组。除非我错过了另一个明显的事情... :( - Dervin Thunk
没问题。我再看了一遍。 - Joel Coehoorn

0

使用 System.Linq;

    public object[] Values
    {
        get;
        set;
    }

    public List<object> CategoriesToList()
    {
        List<object> vals = new List<object>();
        vals.AddRange(Values.ToList());

        return vals;
    }

实际上,你可以直接传递Values,因为object[]是一个可枚举的对象。 - Joseph Daigle

0

如果您不想使用linq,您可以简单地进行强制转换:

vals.AddRange((IEnumerable<object>) this.Values);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接