相关疑难解决方法(0)

调用ToList()会对性能产生影响吗?

使用时ToList(),是否需要考虑性能影响?

我正在编写一个查询来从目录中检索文件,这是查询:

string[] imageArray = Directory.GetFiles(directory);

但是,由于我喜欢与之合作List<>,我决定投入......

List<string> imageList = Directory.GetFiles(directory).ToList();

那么,在决定进行这样的转换时是否应该考虑某种性能影响 - 或者仅在处理大量文件时考虑?这是一个微不足道的转换?

c# arrays performance list

131
推荐指数
6
解决办法
5万
查看次数

计算IEnumerable <T>的最佳方法

什么是最好/最简单的方法来获取IEnumerable集合中的项目数而不枚举集合中的所有项目?

可以使用LINQ或Lambda吗?

c# linq

27
推荐指数
4
解决办法
5万
查看次数

检查IEnumerable是否具有任何行而不枚举整个列表

我有以下方法返回一个IEnumerable类型T.该方法的实现并不重要,除了yield return延迟加载IEnumerable.这是必要的,因为结果可能有数百万项.

public IEnumerable<T> Parse()
{
    foreach(...)
    {
        yield return parsedObject;
    }
}
Run Code Online (Sandbox Code Playgroud)

问题:

我有以下属性可用于确定是否IEnumerable有任何项目:

public bool HasItems
{
    get
    {
        return Parse().Take(1).SingleOrDefault() != null;
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点?

.net c# linq ienumerable lazy-loading

14
推荐指数
3
解决办法
2万
查看次数

如何计算OpenXML中每个工作表的行数

我从Interop库切换到OpenXML,因为我需要读取大Excel文件.在此之前,我可以使用:

worksheet.UsedRange.Rows.Count
Run Code Online (Sandbox Code Playgroud)

获取工作表上包含数据的行数.我使用这些信息来制作进度条.在OpenXML中,我不知道如何获得有关工作表的相同信息.我现在拥有的是这段代码:

 using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(path, false))
{
    WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;
    WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();
    SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();
    int row_count = 0, col_count;
    // here I would like to get the info about the number of rows
    foreach (Row r in sheetData.Elements<Row>())
    {
        col_count = 0;
        if (row_count > 10)
        {
            foreach (Cell c in r.Elements<Cell>())
            {
                // do some stuff  
                // update progressbar  
            }
        }
        row_count++;
    }
}
Run Code Online (Sandbox Code Playgroud)

c# openxml

8
推荐指数
1
解决办法
1万
查看次数

Any() 的多重枚举和使用

当我需要执行以下操作时,我试图找出 LINQ 的正确约定是什么

  • 如果有项目,则逐行打印它们
  • 如果没有项目,则打印"No items"

我想这样做的方式就像

if (items.Any())
{
    foreach (string item in items)
    {
        Console.WriteLine(item);
    }
}
else
{
    Console.WriteLine("No items");
}
Run Code Online (Sandbox Code Playgroud)

然而,这在技术上违反了多重枚举原则。一种不违反这一点的方法是

bool any = false;
foreach (string item in items)
{
    any = true;
    Console.WriteLine(item);
}   
if (!any)
{
    Console.WriteLine("No items");
}
Run Code Online (Sandbox Code Playgroud)

但显然,这不太优雅。

.net c# linq algorithm

7
推荐指数
1
解决办法
1006
查看次数

我应该如何获得 IEnumerable 的长度?

我正在编写一些代码,然后去获取 IEnumerable 的长度。当我写的时候myEnumerable.Count(),令我惊讶的是,它没有编译。在阅读了 IEnumerable Count() 和 Length 之间的差异后,我意识到实际上是 Linq 为我提供了扩展方法。

使用 .Length 也不适合我。我使用的是旧版本的 C#,所以也许这就是原因。

获取 IEnumerable 长度的最佳实践是什么?我应该使用 Linq 的 Count() 方法吗?或者有更好的方法。.Length 在更高版本的 C# 中可用吗?

或者,如果我需要计数,IEnumerable 是否是该工作的错误工具?我应该改用 ICollection 吗? 在不迭代的情况下计算 IEnumerable<T> 中的项目?说 ICollection 是一个解决方案,但是如果您想要一个带有计数的 IEnumerable,它是否是正确的解决方案?

强制性代码片段:

var myEnumerable = IEnumerable<Foo>();

int count1 = myEnumerable.Length; //Does not compile

int count2 = myEnumerable.Count(); //Requires Linq namespace

int count3 = 0; //I hope not
for(var enumeration in myEnumerable)
{
    count3++;
}
Run Code Online (Sandbox Code Playgroud)

c# linq performance ienumerable count

7
推荐指数
1
解决办法
1万
查看次数

Enumerable.Any() 和可能的多重枚举

Rider/ReSharper 给了我可能的多重枚举警告:

public void ProcessProductCodes(IEnumerable<string> productCodes) {
    if (productCodes.Any()) {
        DoStuff(productCodes);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是误报,还是 Any() 函数确实搞乱了集合的枚举?

c#

3
推荐指数
1
解决办法
1334
查看次数

Enumerable Count 方法在循环中的性能

我有一系列由以下表示的项目IEnumerable

我需要循环遍历这些项目,它应该是 afor-loop因为索引很重要。

我的问题是,以下两个选项之间的性能有区别吗?

1.

for (int i = 0; i < items.Count(); i++)
{
    //Do something
}
Run Code Online (Sandbox Code Playgroud)
var itemsLength = items.Count();

for (int i = 0; i < itemsLength; i++)
{
    //Do something
}
Run Code Online (Sandbox Code Playgroud)

换句话说,该方法是否items.Count()在选项 1 中的每次迭代中一次又一次地运行?

.net c# performance ienumerable for-loop

3
推荐指数
2
解决办法
800
查看次数

C#:计算iEnumerable对象

我试图获取存储在Ienumerable对象中的元素的计数.这没有count属性,所以我如何得到var对象的计数?

谢谢

c#

2
推荐指数
1
解决办法
1万
查看次数

将C#列的值一起比较

我有一个名为AxiomSubset6列的C#列表,其中有几行数据,我想检查列表中特定列的所有值是否相等,如果它们相等则应返回true并转到下一列列并检查它们的相等性等.

例如,我在列表中有以下数据行

CC   Mon    str     stg  rate   units 

HP  15-Mar              4.0800  4
HP  15-Feb              4.0800  4
HP  15-Jan              4.0800  4
LN  15-Mar  3.25    Put 0.0500  50
LN  15-Feb  3.25    Put 0.0500  50
LN  15-Jan  3.25    Put 0.0500  50
LN  15-Mar  3.50    Put 0.1000  50
LN  15-Feb  3.50    Put 0.1000  50
LN  15-Jan  3.50    Put 0.1000  50
Run Code Online (Sandbox Code Playgroud)

在上面的数据中检查列的相等性时,CC它应该返回false,因为它们都不相等

我尝试按如下方式进行操作,将一行与前一行进行比较,显然没有给出预期的结果

for (int i = 0; i < AxiomSubSet.Count; i++)
{
    if (AxiomSubSet[i].CC.ToString() == AxiomSubSet[i + 1].CC.ToString())
    {
        result …
Run Code Online (Sandbox Code Playgroud)

c# list

1
推荐指数
1
解决办法
1876
查看次数

标签 统计

c# ×10

linq ×4

.net ×3

ienumerable ×3

performance ×3

list ×2

algorithm ×1

arrays ×1

count ×1

for-loop ×1

lazy-loading ×1

openxml ×1