访问ICollection中的值

问题描述:

string greeting = "";  
foreach (System.Collections.Generic.ICollection<object> x in greetingRecommendation.Resolution.Values) 
    { 
      foreach (var y in x) 
      { 
       greeting = (string)y; 
      } 
    } 

我需要检索“greetingRecommendation.Resolution.Values”内部的“Good Morning”值。我按照上面的方法(使用foreach)和它的工作方式执行了此操作。但是,有没有更好的方法来获取这个单一的价值。 enter image description here访问ICollection中的值

+0

你有没有尝试之前发布的搜索回答你的问题?你的问题是微不足道的。 –

+0

我做了一些谷歌,我发现ICollection有ElementAt方法。如果你知道你想访问的值的索引,那么你可以调用ElementAt方法,并且这个假设可以更快地返回值,然后使用foreach循环。请注意,这是一种扩展方法。 –

+0

我试过使用ElementAt。但没有办法可用 –

您可以使用LINQ以更简单的方式查询集合。

让我们以一个例子如下集合:

var objCollection = (ICollection<object>) new List<object> 
{ 
    "Good Morning", 
    "Good Afternoon", 
    "Good Night" 
}; 

现在,我们可以提取的姓氏,名字或一个项目在一个特定的指标有以下:

var firstItem = objCollection.First(); // returns "Good Morning" 
var lastItem = objCollection.Last(); // returns "Good Night" 
var itemAtIndex1 = objCollection.ElementAt(1); // returns "Good Afternoon" 

还有OrDefault所有以前的变种。不同的是,First将抛出一个异常,如果objCollection没有项目,但FirstOrDefault将简单地返回default(object)(这是null顺便说一句)如果objCollection没有项目。

对于把一个例子,这是OrDefault变种如何使用:

var firstItem = objCollection.FirstOrDefault(); // returns "Good Morning" 
var lastItem = objCollection.LastOrDefault(); // returns "Good Night" 
var itemAtIndex99 = objCollection.ElementAtOrDefault(99); // returns null, because `objCollection` has only three items and the index 99 doesn't exist on it 

greetingRecommendation.Resolution.Values的情况下,类似如下的可用于检索集合的第一项:

var greeting = greetingRecommendation.Resolution.Values.FirstOrDefault() as string;

我们假设Values属性的类型为ICollection<object>

该行将确保:

  • 如果Values酒店有没有项目,没有会抛出异常,并default(object)将返回。
  • Values属性中的第一项将被安全铸造为string,以避免发生问题,如果它包含无法铸造到string的值。如果该值无法播放,则返回default(string)(即null)。
  • 变量greeting将包含nullstring,其中第一个值为Values属性的第一个值。

不要忘记在使用指令中添加一个using System.Linq;以便能够使用LINQ。

我已经准备了.NET小提琴在下面的链接,在行动中看到这样的LINQ操作: