【问题标题】:C# loop over List<T> collection and find if value exists is saying projectnameC# 遍历 List<T> 集合并查找值是否存在是说项目名称
【发布时间】:2017-10-19 04:17:47
【问题描述】:

我想查看我拥有的属性集合中是否存在值。 性能并不重要。

 //Insert all the main without wav match 
foreach(var mainOnly in fileStuff)
{
    var finalCollection = new FinalFile();

    var result = finalFile.First(s => s.MainId == mainOnly.ParsedName);

    if (string.IsNullOrEmpty(result))
    {
        finalCollection.ClientName = mainOnly.ClientName;
        finalCollection.MainId = mainOnly.ParsedName;
        //finalCollection.WavName = Convert.ToInt64(wav.ParsedName);
        finalCollection.LastWriteTime = mainOnly.CreationTime;
        finalCollection.folder = mainOnly.FolderName;
        mainAll.Add(finalCollection);
    }         
}

我正在循环超过 1,000 条记录,我不想添加另一个循环,所以我想我会

  1. 检查是否s.MainId == mainOnly.ParsedName 例如34343 == 23445
  2. 如果(没有返回)然后添加到我的新收藏中

问题

// what am i doing wrong here?  It is not right 
var result = finalFile.First(s => s.MainId == mainOnly.ParsedName);

// this is not right as it won't compile as "result" = 'ConAppFolderFileFinder.FinalFile'
// that is my projectname.FinalFile   :/
if (string.IsNullOrEmpty(result))

【问题讨论】:

  • 您应该使用FirstOrDefault(),如果没有符合您条件的项目,它将返回nullFirst() 将在没有返回任何项目时抛出异常。
  • 使用 FirstOrDefault(...) 并检查结果是否为空
  • FirstFirstOrDefault 都不会帮助 OP,因为它们会返回 FileName 的实例而不是字符串。

标签: c# list linq collections


【解决方案1】:

我猜你只会检查你的查询是否返回 any 元素,所以你可以使用这种方法:

if(finalFile.Any(s => s.MainId == mainOnly.ParsedName))
{
    finalCollection.ClientName = mainOnly.ClientName;
    finalCollection.MainId = mainOnly.ParsedName;
    //finalCollection.WavName = Convert.ToInt64(wav.ParsedName);
    finalCollection.LastWriteTime = mainOnly.CreationTime;
    finalCollection.folder = mainOnly.FolderName;
    mainAll.Add(finalCollection);
}

Any 将检查您的集合中是否至少有一个元素满足您的要求,如果是,则返回true

如果您还需要匹配条件的第一个元素的值,您应该使用 FirstOrDefault,如 cmets 中所建议的那样,如果未找到任何元素,它将返回 null。但是,您必须询问其字符串表示形式(如果您覆盖了ToString)或ConAppFolderFileFinder.FinalFile 中具有string 类型的任何属性。

【讨论】:

  • 所以一般来说 Any 会比 FirstOrDefault 更受欢迎吗?
  • 查看我的编辑。取决于您是想对找到的实例做任何事情,还是只想检查 if 是否有。
  • 好的,所以实际上我必须做的事情不等于 if(!final... thx
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-22
  • 1970-01-01
  • 2012-01-09
  • 2014-01-27
  • 1970-01-01
相关资源
最近更新 更多