我有一个场景,每个组中有多个图像,需要根据字符串条件提取单个图像。
下面是它现在完成的方式,并且有效;然而,不确定这是否是最有效的方式、性能、大小,也许也是明智的实践
foreach (var g in groups)
{
SomeType file = null;
if (file == null)
{
file = g.Where(i =>
i.URL.Contains("StringA")
).FirstOrDefault();
}
if (file == null)
{
file = g.Where(i =>
i.URL.Contains("StringB")
).FirstOrDefault();
}
if (file == null)
{
file = g.Where(i =>
i.URL.Contains("StringC")
).FirstOrDefault();
}
if (file == null)
{
// etc...
}
if (file == null)
{
file = g.FirstOrDefault();
}
}
最佳答案
恐怕您可能会觉得这个答案有点无聊,但我会避免尝试寻找一些非常令人印象深刻但复杂的 linq 查询。我相信这是可以做到的,但不值得为此头疼。
只需将所有字符串放在一个数组中,然后按优先顺序检查它们。除非你正在运行大量项目,否则它会足够快。您没有执行数据库查询 - 您的 foreach 循环清楚地表明您的数据已经在内存中。
所以,我会丢掉大的 if 语句,并以如下方式为目标:
string [] my_list = new string [] {"StringA", "StringB", "StringC"};
foreach (var g in groups)
{
foreach (string s in my_list)
{
file = g.Where(i => i.URL.Contains(s)).FirstOrDefault();
if (file != null)
break;
}
if (file == null)
{
file = g.FirstOrDefault();
}
}
就像我说的,不是很令人兴奋,但是更改搜索中的优先级以及\或添加和删除字符串非常容易。
HTH,
亚当。
关于c# - 根据优先级条件获取单个项目的最有效方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39536020/