返回另一个库的IEnumerable <t> </t>

时间:2015-02-14 06:17:18

标签: c# ienumerable linq-to-json

我实现了一个库,它使用Newtonsoft的LINQ to JSON函数将JSON数据解析为各种C#对象。除了懒惰与渴望的方法之外,对于传递其他库的IEnumerable与将其转储到List然后返回它有什么影响吗?这是否允许更好的垃圾收集或沿着这些线的任何东西?

public class SimpleClass
{
    public IEnumerable<string> Tags { get; private set; }

    // Assume the token passed is a valid array of strings.
    public void UpdateTags1(JToken token)
    {
        this.Tags = token["tags"].Values<string>();
    }

    public void UpdateTags2(JToken token)
    {
        this.Tags = new List<string>(token["tags"].Values<string>());
    }
}

1 个答案:

答案 0 :(得分:2)

关于Values<string>()方法是在同一个程序集中还是在不同的程序集中,没有任何区别。

然而,值得注意的是 是否存在实际差异,具体取决于Values<string>()方法实际返回的内容。通常,当返回IEnumerable<T>的实例时,序列是延迟执行的结果。即直到你评估序列,它实际上并不存在。

更重要的是,每次评估它时都会重新创建。根据评估,这可能是也可能不是问题。至少,它可能是一个性能问题。评估结果也可能在评估之间发生变化。

当你不确定这不会是一个问题时,转换为列表或数组通常是一个好主意,只是为了确保你得到一个完全评估的序列。你可以像在你的例子中那样,或者通过调用例如结果上的ToList()ToArray()扩展方法。