你需要这样的东西:
var a = collection.OfType<YourCollectionElementType>().FirstOrDefault(i=>i.Equals(something));
var b = collection.OfType<YourCollectionElementType>().FirstOrDefault(i=>i.Equals(somethingelse));
您的集合IEnumerable
至少应该实现能够使用此代码。这取决于您的收藏类型。如果它实现了 generic IEnumerable<T>
,比如说它List<YourCollectionElementType>
或者一个数组YourCollectionElementType[]
,那么你就不需要使用OfType<T>
,即
var a = collection.FirstOrDefault(i=>i.Equals(something));
var b = collection.FirstOrDefault(i=>i.Equals(somethingelse));
如果您的收藏不包含该值,a
和/或b
将获得null
值。
实际上,您可以在 MSDN 中阅读所有这些内容。LINQ 并不难学,如果你尝试例如:
Enumerable.FirstOrDefault 方法 (IEnumerable)
Enumerable.OfType 方法
编辑
在您的评论中,您说的是可以保证只有一个值存在。您需要两个单独的变量是否非常重要?你可以像这样得到现值:
object thevalue = collection.FirstOrDefault(i => i == something || i == somethingelse);
编辑
实际上,我会让你的循环保持原样,只添加了这样的一行:
SomeObject a;
SomeObject b;
foreach(SomeObject so in collection)
{
if(so.Value == something)
a = so;
else if(so.Value == somethingElse)
b = so;
if(a!=null && b!=null)
break;
}
如果只期望其中一个值,那么
SomeObject a;
SomeObject b;
foreach(SomeObject so in collection)
{
if(so.Value == something)
{
a = so;
break;
}
else if(so.Value == somethingElse)
{
b = so;
break;
}
}