gpt4 book ai didi

c# - 与数组相比,使用 IEnumerable 有哪些优势?

转载 作者:太空狗 更新时间:2023-10-29 23:54:11 24 4
gpt4 key购买 nike

Code Review.stackexchange 上问了我的问题之后我被建议使用以下代码片段。我注意到在传输过程中,string[] Lines 被设置为 IEnumerable。

仔细查看 IEnumerable 函数后,我没有发现任何可以提高性能的信息。那么这只是为了可读性吗?或者使用 IEnumerable 而不是数组实际上是否存在性能差异或一般优势?

private void ProcessSingleItem(String fileName, String oldId, String newId)
{
string[] lines = File.ReadAllLines(fileName);

File.WriteAllText(fileName, ProcessLines(lines, oldId, newId));
}

private String ProcessLines(IEnumerable<String> lines, String oldId, String newId)
{
StringBuilder sb = new StringBuilder(2048);
foreach (String line in lines)
{
sb.AppendLine(line.Replace(oldId, newId));
}
return sb.ToString();
}

最佳答案

到目前为止,所有的答案都表明,接受的内容更通用会使您的辅助方法更有用。这是对的。但是,还有其他注意事项。

  • 优点:使用序列而不是数组可以告诉调用您的代码的开发人员“我不会改变您传给我的对象”。当我调用采用数组的方法时,我怎么知道它不会更改数组?

  • 缺点:采用更通用的类型意味着您的方法对于该更通用类型的任何实例都必须是正确的。你怎么知道它是正确的?测试。因此,采用更通用的类型可能意味着更大的测试负担。如果你采用一个数组,那么你只有几种情况:空数组、空数组、协变数组等等。如果您采用序列,则要测试的案例数量会更多。

  • 您提到了性能。请记住,根据感觉而不是经验数据做出微观决定是获得良好绩效的糟糕方法。相反,设定一个性能目标,根据该目标衡量您的进度,并使用分析器找到最慢的东西;先攻击那个数组上的 foreach 循环编译为等效的 for 循环;在 IEnumerable 上,代码更复杂并且可能慢几微秒。您的应用程序在市场上的成功或失败是否将由这些微秒决定?如果是这样,那么仔细衡量性能。如果不是,请按照您喜欢的方式编写代码,如果您引入了导致您不再满足目标的回归,您的自动化测试会告诉您。您正在运行自动化性能测试,对吗?如果您如此关心性能,那您应该如此。

关于c# - 与数组相比,使用 IEnumerable 有哪些优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26178335/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com