我实现了一个库,它使用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>());
}
}
答案 0 :(得分:2)
关于Values<string>()
方法是在同一个程序集中还是在不同的程序集中,没有任何区别。
然而,值得注意的是 是否存在实际差异,具体取决于Values<string>()
方法实际返回的内容。通常,当返回IEnumerable<T>
的实例时,序列是延迟执行的结果。即直到你评估序列,它实际上并不存在。
更重要的是,每次评估它时都会重新创建。根据评估,这可能是也可能不是问题。至少,它可能是一个性能问题。评估结果也可能在评估之间发生变化。
当你不确定这不会是一个问题时,转换为列表或数组通常是一个好主意,只是为了确保你得到一个完全评估的序列。你可以像在你的例子中那样,或者通过调用例如结果上的ToList()
或ToArray()
扩展方法。